한번씩 겪는 일이죠. 그 dll을 제공해준 업체에서 생각없이 MFC에 의존하는 dll을 만들었기 때문인데...
CStringArrary 나 CArray같이 MFC 클래스를 인자로 주고받는 dll은 직접 델파이에서 호출할 방법이 없습니다. 역으로 생각해서 델파이에서 VCL 클래스, 즉 델파이 string(AnsiString)이나 TStringList를 인자로 주고받는 함수를 dll로 만들어도 비주얼 C++에서는 쓸 수 없는 것과 마찬가지입니다.
일반적으로 이런 경우에 해결할 수 있는 방법은 래퍼(wrapper) dll을 만들어서 쓰는 방법 뿐입니다. 새로운 dll을 만들어서 중간에서 MFC 타입을 표준인 PChar, 그러니까 C/C++의 char * 타입으로 변환해주는 거죠.
사실 이런 dll을 제공해주는 경우는 보통 다른 제품을 팔면서 SDK로서 주는 건데요. 상식이 있는 업체의 경우에는 다른 툴과도 호환이 가능한 dll, MFC 클래스를 쓰지 않는 dll을 만들어주는 것이 보통입니다. 좀 생각이 없는 업체라고 할 수 있죠. 납품하는 입장에서 고객사에 비주얼 C++만을 쓰라고 강요하는 셈이니까요. 얘기가 통할만한 업체이면 표준 C 방식의 dll을 달라고 요구하거나 혹은 wrapper dll을 달라고 요구해보시구요. 갑보다 무서운 을인 경우(업체가 너무 크고 압박이 강한 경우--;;)라면... 어쩔 수 없이 wrapper dll을 직접 만들어 써야겠습니다.
그럼...
Genie 님이 쓰신 글 :
: 업체에서 DLL을 받았는데
: 대중 밑에 구조인데
:
: CStringArrary 나 CArray를 어떻게
: 델파이에서 값을 받을지 막막하네요.
:
: Class DBInfo
: {
: public:
: int nIndex;
: CString str;
: CStringArray strAy;
: };
:
: typedef CArray<DBInfo, DBInfo>DB_InfoAy;
:
: __declspec(dllimport) _MsgStruct(DB_InfoAy *pdb_info);
|