c#代码调用问题

本文关键字:问题 调用 代码 | 更新日期: 2023-09-27 18:12:42

我想做的是:我有一些嵌入式C代码,它做一些信号处理。我也有一套c#工具。我想使用c#代码被称为嵌入式C代码与一些波形来"测试"算法,看看它在想什么/做什么。

我做了什么:

嵌入式C代码:

__declspec (dllexport) void SigInit(int Flag);   
void SigInit(int Flag) {  ... } 

我编译为Win32 DLL。配置类型为"动态库(.dll)",MFC设置为"使用标准Windows库"。我在Visual Studio 2010类查看器中"查看"了我的库,一切看起来都很好。

然后在我的c#代码(VS2010与。net 4.0):
public static class ProcessSignals
{
    [DllImport(@"C:'Users'rpease'Desktop'SigLibrary.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern void SigInit(int Flag);
}

但是每当我尝试运行主程序并调用ProcessSignals.SigInit(0)时:

无法在DLL 'C:'Users' release 'Desktop'SigLibrary.dll'中找到名为'SigInit'的入口点。

我认为这是一个名字混淆的问题,但我想我已经处理好了。建议表示赞赏。我认为我遵循的指导方针:PInvoke DLL在c#中,但不能过去这一点。

谢谢,罗杰

c#代码调用问题

打开Visual Studio命令提示符,将目录更改为包含有问题的DLL的文件夹,然后运行:

dumpbin <nameOfDll> /exports

(其中<nameOfDll>是您的DLL文件的文件名,不带尖括号)

您是否看到您期望的函数名称列出?

问题是c++编译器重命名函数。将导出的函数声明为

extern "C" {
    __declspec(dllexport) void SigInit(int Flag);
}

使用depends.exe查看实际导出的函数名,并在DllImport属性中设置Entrypoint