我在C#应用程序中使用非托管dll时遇到问题。具体来说,我有这个头文件
标题
#ifdef RSAVREC_EXPORTS
#define RSAVREC_API __declspec(dllexport)
#else
#define RSAVREC_API __declspec(dllimport)
#endif
class RSAVREC_API CRsavRec {
public:
CRsavRec(void);
};
RSAVREC_API void REC_stopRecordAvi(unsigned int chnIndex);
C#代码
[DllImport("rsavRec.dll")]
private static extern void REC_stopRecordAvi(uint chnIndex);
private void button2_Click(object sender, EventArgs e)
{
REC_stopRecordAvi(0);
}
点击按钮2,我收到此消息:
无法在DLL“rsavRec.dll”中找到名为“REC_stopRecordAvi”的入口点。
Dll是用VC6编译的。
提前致谢。
答案 0 :(得分:0)
您可以尝试在非托管导出函数上使用extern“C”:
extern "C" RSAVREC_API void REC_stopRecordAvi(unsigned int chnIndex)
{
// implementation
}
您可能还想使用__cdecl调用约定:
extern "C" RSAVREC_API __cdecl void REC_stopRecordAvi(unsigned int chnIndex)
{
// implementation
}
答案 1 :(得分:0)
以下适用于我:
中的.h
extern "C"
{
__declspec(dllexport) int __cdecl MethodName(parameters);
}
在.cpp
中extern int __cdecl MethodName(parameters)
{
//Code
...
return success;
}