C++로 만든 DLL 파일명은 WebCrawling0.dll 로 한다
1. 구조체를 이용한 호출의 예
1.1 C++ 에서의 작업
1.1.1 구조체 선언
typedef struct Process_Struct_tag {
int nCmd;
char szParam1[512];//string
char szParam2[512];//string
int nErrorCode;
}Process_Struct, *PProcess_Struct;
//[DllImport("WebCrawling0.dll", CallingConvention = CallingConvention.Cdecl)] extern public static IntPtr ProcessControl_int(ref Process_Struct ps);
[DllImport("WebCrawling0.dll", CallingConvention = CallingConvention.Cdecl)] extern public static string ProcessControl(ref Process_Struct ps);
}
1.2.3 dll의 함수를 호출하는 부분
Process_Struct ps;
ps.nCmd = 0x1010;
ps.szParam1 = "WebCache";
string szReturn = CrawlDll.ProcessControl(ref ps);
if (ps.nErrorCode != 0)
MessageBox.Show(ps.nErrorCode.ToString() + ps.szParam2);
------------------------
참조 ( 리턴이 char* 인데 int*로 (C#에서는 IntPtr) 정의 해도 아래와 같이 마샬링을 하면 int* 를 string으로 변한하여 사용할 수 있다)
IntPtr ntReturn = CrawlDll.ProcessControl_int(ref ps);
string szReturn = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(ntReturn);
System.Diagnostics.Debug.WriteLine($"szResutn = {szReturn}");
'WPF 개발 ( C# )' 카테고리의 다른 글
WPF 타이틀바가 없는 윈도우창을 마우스로 끌고 다니기 (MFC의 HITTEST 사용 처럼) (1) | 2018.12.05 |
---|---|
WPF 화면변경사항 즉시 업데이트 하는 방법 (0) | 2018.12.05 |