从非托管C ++调用方法

时间:2014-02-12 23:52:01

标签: c# c++ dll unmanaged

我在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编译的。

提前致谢。

2 个答案:

答案 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;

}