无法在DLL中找到入口点

时间:2012-02-22 10:03:05

标签: c# c++ visual-c++

我有一个C#应用程序,我试图将参数发送到C ++函数。但是,我收到了错误(在主题中提到)

C#应用程序:

static class SegmentationFunctions
{
[DllImport("MyApplication.dll", EntryPoint = "fnmain", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
        public static extern int fnmain(string search);
    }
}

public partial class MainWindow:Window
{
public MainWindow()
{
InitializeComponent();

string search = "test string here";
int scommand = SegmentationFunctions.fnmain(search);
}

C ++ file.h

extern "C" QUERYSEGMENTATION_API int fnmain(char query[MAX_Q_LEN]);

C ++文件.cpp

extern "C" QUERYSEGMENTATION_API int fnmain(char searchc[MAX_LEN_Q])
{

do something...

}

2 个答案:

答案 0 :(得分:5)

Dependency Walker可以显示从DLL有效导出的函数。您将能够看到您的fnmain是否存在,或者是_fnmain,或者名称中是否有C ++装饰。

答案 1 :(得分:0)

请注意,默认情况下,visual studio不会将您的本机输出复制到与托管输出相同的文件夹中。

手动将本机输出复制到托管构建文件夹并重试 - 如果这是您的问题,则需要更改C ++构建设置以使目标文件夹与托管应用程序文件夹相同。

您的代码是正确的 - 只要正确定义了QUERYSEGMENTATION_API宏并且您的dll实际上构建为“MyApplication.dll”

我会手动运行文件系统中的可执行文件 - 确保最新的exe和dll在同一个文件夹中,如果失败则运行depends.exe来计算它。