要定義的C++函數沒有外部「C」塊。由於C++允許您重載函數(即使用不同的參數集創建多個captureCamera()函數),因此DLL內的實際函數名稱將會不同。
dumpbin /exports YourDll.dll
你會得到這樣的事情:?
Dump of file debug\dll1.dll
File Type: DLL
Section contains the following exports for dll1.dll
00000000 characteristics
4FE8581B time date stamp Mon Jun 25 14:22:51 2012
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00011087 [email protected]@[email protected] = @ILT+130([email protected]@[email protected])
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
的captureCamera @@ YAHAAH @ Z可以通過打開Visual Studio命令提示符,將您的二進制文件目錄並運行此檢查是實際編碼您指定的參數的錯位名稱。
正如在其他的答案中提到,簡單的extern「C」添加到你的宣言:
extern "C" __declspec(dllexport) int captureCamera(int& captureId)
{
...
}
您可以重新檢查,這個名字通過重新運行DUMPBIN是正確的:
Dump of file debug\dll1.dll
File Type: DLL
Section contains the following exports for dll1.dll
00000000 characteristics
4FE858FC time date stamp Mon Jun 25 14:26:36 2012
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 000110B4 captureCamera = @ILT+175(_captureCamera)
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
你應該定義是什麼入口端口在你的C#代碼中。 –
'公共靜態'意味着你的函數在C++類中。 C#只能訪問C函數。此外,語法不正確(應該是'public:static')。所以這顯然不是你真正的功能聲明。 – dialer
從'public static'改爲'public:static' - 沒有任何改變。 –