AnsiString 메소드 정리

* AnsiCompare
현재 문자열과 파라미터로 지정한 문자열의 크기를 비교하여 결과를 되돌려 줍니다.
이때 파라미터로 지정된 문자열은 AnsiString 문자열과 비교하여 AnsiString 문자열보다 크면 0보다 큰수를 반환하고, 작을경우에는 0보다 작은수를 , 같으면 0을 반환합니다.
원형
 int __fastcall AnsiCompare(const AnsiString & rhs) const;

Ex 
AnsiString strCompare = "AAA";
int nReturn;
nReturn = strCompare.AnsiCompare("BBB");
if (nReturn > 0) ShowMessage("값이 큽니다.\n");
else if (nReturn > 0) ShowMessage("값이 작습니다.\n");
else  ShowMessage("값이 같습니다.\n");      

Result
값이 작습니다.


...............

[참고] http://bcbjournal.org/articles/vol1/9708/An_AnsiString_class_reference.htm
아래 부분 참고...

더보기


DLL을 작성하다 보면 DLL을 호출하는 부분이 누구인지 궁금할 때가 있다.
이럴때 DllMain 부분을 다음과 같이 작성하면 누가 호출하는지 알수가 있다..
VCL과 MFC에서 사용하는 방법이 조금 다르다... 다음은 MFC에서 사용하는 방법으로 작성하여 본 것이다..

VCL에서는 호출하는 정의가 조금 다르다.. 그래서.. DLL_PROCESS_ATTACH 부분이 조금 다르다...

VCL : int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
MFC : BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)





아래는 참고 내용이다..

DllMain

더보기


LL 을 만들때 Import 헤더와 Export 헤더가 다르게 나올수 있다..

이럴때.. 헤더 파일에 다음과 같이 지시자를 만들면 조금 하나의 헤더파일만 작성하면 다른 헤더파일을 만들 필요가 없다..

#ifdef __DLL__
#define DLL_FUNC __declspec(dllexport)
#else
#define DLL_FUNC __declspec(dllimport)
#endif

그리고 전체 헤더에 전역으로 처리하고자 할때에도 다음과 같은 부분을 만들고 그 사이에 헤더 파일을 작성하면 범위 안의 함수들은 같은 전역으로 처리가 가능하다..

#ifdef __cplusplus
extern "C"{
#endif
.... 내용......
#ifdef __cplusplus
}
#endif

다음은 위의 방법으로 만들어본 헤더 파일이다...
이 에러는 디버거 모듈이 로드 되지 않았을때 나온다.. 업데이트 하다가 많이 발생했다..

이럴때는 이 모듈을 다시 등록해주면 된다..

regsvr32 bordbk105.dll
regsvr32 bordbk105n.dll


Open Dialog나 Save Dialog 사용시 보통 실행 시키면 화면 중앙에 위치하게 된다.

그런데, 원하는 특정 위치로 보내야할때가 있다..

이럴때는 해당 다이얼로그의 OnFolderChange의 이벤트에 다음과 같이 작성한다.

// 한번에 하는 방법은 ForceDirectories 함수를 이용하면 된다..

함수 설명은 아래와 같다..  반환값은 실패 성공 뿐이니까.. 실패 성공만 처리하면된다..
굳이 디렉토리가 존재하는지 확인 할 필요도 없다.
있으면 그냥 넘어가고 없으면 생성하게 된다.

ex) ForceDirectories("C:\\IT\\LOG");

Creates a new directory, including the creation of parent directories as needed.

Pascal
function ForceDirectories(const Dir: string): Boolean;
C++
Boolean ForceDirectories(string Dirconst);

FileCtrl

ForceDirectories creates a new directory as specified in Dir, which must be a fully-qualified path name. If the directories given in the path do not yet exist, ForceDirectories attempts to create them. 

ForceDirectories returns true if it successfully creates all necessary directories, false if it could not create a needed directory.

Warning: 
Important:Do not call ForceDirectories with an empty string. Doing so causes ForceDirectories to raise an exception.  
Note: 
The FileCtrl unit (Windows only) also contains a ForceDirectories function. However, the FileCtrl version is deprecated, and the SysUtils version preferred, even if the code does not need to be cross-platform.  

 


사용예) hDLL = LoadLibraryEx("Temp.dll", NULL,LOAD_LIBRARY_AS_DATAFILE);

#define DONT_RESOLVE_DLL_REFERENCES            0x00000001
#define LOAD_IGNORE_CODE_AUTHZ_LEVEL           0x00000010
#define LOAD_LIBRARY_AS_DATAFILE                     0x00000002
#define LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE   0x00000040
#define LOAD_LIBRARY_AS_IMAGE_RESOURCE       0x00000020
#define LOAD_WITH_ALTERED_SEARCH_PATH         0x00000008

참고
•DONT_RESOLVE_DLL_REFERENCES :
   이 옵션은 윈도우 NT에서만 사용할 수 있으며 DllEntryPoint를 부르지 않을 때 사용한다.     DllEntry와 DllExit 코드는 Dll Main을 설명할 때 함께 하기로 하고,  지금은 Dll의 Entry Point에서 명시된 코드를 실행하지 않을 때 이 옵션을 사용한다

•LOAD_LIBRARY_AS_DATAFILE :
    이 옵션은 DLL 파일을 하나의 단순한 데이터 파일로 이해하고 적재하도록 하는데 그 목적이 있다. 실행 코드가 전혀 없는 DLL들은 시스템에서 DLL의 실행을 위한 특별한 준비가 필요하지 않으므로 실행 시간을 절약할 수 있다.

•LOAD_WITH_ALTERED_SEARCH_PATH :
   이 옵션을 사용하면 위에서 언급한 DLL을 탐색하는 경로를 LoadLibraryex(LPTCSTR)에 명시된 대로 바꿀 수 있다

'S/W 개발 > Embarcadero' 카테고리의 다른 글

디렉토리를 한번에 생성하는 방법  (0) 2008.09.29
LoadLibraryEx  (0) 2008.03.20
가끔씩 하는 RAD Studio 스플래쉬 바꾸기..  (1) 2008.01.11
조합키를 사용법  (0) 2008.01.10
LabView의 기능중에 컴파일 기능이 있다.

이중 DLL 만들기가 있다.

랩뷰가 생성되는 파일은 M$에서 사용되는 COFF 파일이다.
VCL에서는 OMF 형식으로 되니까.. 이부분을 변환해 줘야 된다고 생각하고 정적으로 불러왔으나 되지 않는다.

혹시나 해서 동적으로 불러보니 잘 된다.. ㅠㅠ(하루 까먹었다..)

우선 형을 정의해 주고..
typedef double (__stdcall *TTempTest)(double);

DLL을 인스턴스로 선언해주고..
HINSTANCE  Dll;

동적으로 생성할  함수형도 미리 선언
TTempTest DLLFunc;

사용하고자 하는 곳에서... (또는 생성부에서...) DLL 로드
둘 중 편한대로 사용..(2000과 XP 모두에서 사용할려면 아래 방식으로 해야 된다고 한다.. 2000 시스템이 없어서 확인 못함... XP는 사용가능)
 Dll = LoadLibrary("Temp.dll");
 Dll = LoadLibraryEx("Temp.dll", NULL, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE);

이제 동적으로 불러오고.... 실행...
 DLLFunc = (TTempTest)GetProcAddress(Dll, "TempTest");
 if(DLLFunc)
 {
       DLLFunc(8);
 }

참고로... 화면을 불러오고자 할때에는...

VI 설정화면에서  윈도우 동작을 플로팅으로 해야 한다..
기본으로 할 경우에는 화면이 동작하지 않는다.
그리고 호출시 프런트패널을 보일것인지.. 로드시 보일것인지도 판단하도록 하고..

그리고 While문을 사용할경우에도 주의..하자.. 
그래프나 차트랑 연동될경우..
하나의 창만 나타날수도 있다.

블록다이어그램에서 인보크노드에서 설정해도 된다..

그리고.. 함수의 입출력 부분을 커넥트 처리를 꼭하자.. 이거 안하면 함수의 인자나 반환값을 받을수가 없다.



VCL을 사용하다가 보면 알람이나 에러메시지를 만나면 간단한것들은 그냥 해결이 가능하나 어떤것들은 모호할때가 있다. 이럴때를 대비해서 Codegear에서 제공하는 메뉴얼을 참조해 하나씩 번역할려고 한다..

그런데, 언제 끝날지 모른다.. 번역기의 도움과 어설픈 영어해석으로 말이 안 맞을수도 있다.
그러나 대충 뜻은 알아 들을수 있을것이다. (예전에 컴파일시 나타나는 에러 메시지를 한글화 했으나. 업데이트 할때마다 이 파일을 자꾸 건들려야 해서.. 이제부터는 아예 이런식으로 정리할려고 한다. 추후 시간이 되면 기존에 하던 작업도 업데이트 해야겠다.)

문서는 100 단위씩 나누어서 작업할 예정..

작업환경 : RAD STUDIO (C++ Builder 2007)
참고문서 : 24682_rad_studio_2007_help_c_reference_help
번역기 : http://translation.infoseek.co.jp/ - 일한번역기가 따로 없어서 인터넷이 될때만 한다.

  1. 현재까지 66개 작업... 우띠.. 디따 많이 남았네...

Virtual Tree View 테스트 프로그램..

참고 문서를 보고 작성해 봄..

Ini 파일을 섹터별로 읽을수 있도록 함.
(우선은 Setup.ini 파일만 읽을수 있음.. 추후.. 파일을 불러서 읽을수 있도록 변경 예정)

Add-on으로 제공되는 VirtualIniTree를 사용하지 않음.. (몇가지 조건이 달라서... 추후 이 컴포넌트도 테스트 예정)

밑의 INI Generator 파일의 생성시 검사 해보기 위해 작성함...



사용자 삽입 이미지





'S/W 개발 > My Develope Program' 카테고리의 다른 글

CSV File to C++ Source & Ini File Generator  (2) 2009.05.22
Virtual Tree Test 프로그램..  (1) 2008.01.11
Code Generator 업데이트  (1) 2008.01.11
GUI TEST  (0) 2007.12.27
  1. Bug Report
    1000 개 이상의 Key가 있을경우 다 못 불러오는 문제점 있음

+ Recent posts

티스토리 툴바