C#引用C++寫的dll文件時,是否需要EntryPoint參數,要看C++聲明方式是一下哪一種:
一、若爲C-Style方式的聲明,則C#引用時不需要EntryPoint參數:
//cpp頭文件聲明,C-style方式聲明,C#引用時不需要EntryPoint參數
extern "C" {
void API_EXPORT _cdecl printC(char* msg);
int API_EXPORT _stdcall addC(int a, int b);
}
***********************************************************
//cpp函數體
///C-Style export with a C-Sytle call (cdecl)
extern "C" void API_EXPORT _cdecl printC(char* msg) {
printf(msg);
printf("printed from a _cdecl function\n");
}
///C-Style export with C++ call (stdcall)
extern "C" int API_EXPORT _stdcall addC(int a, int b) {
int c = a + b;
printf("%d + %d = %d\n", a, b, c);
return c;
}
二、若不是C-Style方式的聲明,則C#引用時需要填EntryPoint參數。
//c++頭文件聲明,這種聲明不是C-Style方式聲明,C#引用時需要帶EntryPoint參數
void API_EXPORT _stdcall printS(char* msg);
********************************************************************
//C++函數體
///C++ Style export with C++ call (stdcall)
void API_EXPORT _stdcall printS(char* msg) {
printf(msg);
printf("printed from a _stdcall function\n");
}
EntryPoint參數可以使用eXeScope,或VC6.0自帶的dependency查看C++生成的dll。
可參考:https://www.cnblogs.com/mfrbuaa/p/3806388.html
整體引用例程可參考:https://github.com/Xinnx/MarshalingTest