我正在尝试从vb.net 2005调用第三方供应商的C DLL,并且出现P/Invoke
错误。我成功地调用了其他方法,但却在其中一个更复杂的方面遇到了瓶颈。所涉及的结构是可怕的,并试图简化故障排除我想创建一个C ++ DLL来复制问题。
有人可以为可以从.Net调用的C ++ DLL提供最小的代码片段吗?我的C ++ DLL中出现Unable to find entry point named XXX in DLL
错误。它应该很容易解决,但我不是C ++程序员。
我想对
的DLL使用.net声明Declare Function Multiply Lib "C:\MyDll\Debug\MyDLL.DLL" Alias "Multiply" (ByVal ParOne As Integer, ByVal byvalParTwo As Integer) As Integer
答案 0 :(得分:2)
尝试在C ++函数声明中使用__decspec(dllexport)魔法小精灵粉尘。此声明设置了从DLL成功导出函数所需的一些内容。您可能还需要使用WINAPI或类似的东西:
__declspec(dllexport) WINAPI int Multiply(int p1, int p2)
{
return p1 * p2;
}
WINAPI设置函数调用约定,使其适合从VB.NET等语言调用。
答案 1 :(得分:0)
您可以尝试查看导出的函数(通过DumpBin或Dependency Walker)并查看名称是否被破坏。
答案 2 :(得分:0)
使用Greg的建议我发现以下工作。如上所述,我不是C ++程序员,只是需要一些实用的东西。
<强> myclass.cpp 强> #include“stdafx.h”
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
int _stdcall multiply(int x , int y)
{
return x*y;
}
<强> myclass.def 强> LIBRARY myclass
EXPORTS
multiply @1
<强> stdafx.cpp 强> #include“stdafx.h”
<强> stdafx.h中强>
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_)
#define AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Insert your headers here
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_)