DllImport中的EntryPoint

 

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章