我有一个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...
}
答案 0 :(得分:5)
Dependency Walker可以显示从DLL有效导出的函数。您将能够看到您的fnmain
是否存在,或者是_fnmain
,或者名称中是否有C ++装饰。
答案 1 :(得分:0)
请注意,默认情况下,visual studio不会将您的本机输出复制到与托管输出相同的文件夹中。
手动将本机输出复制到托管构建文件夹并重试 - 如果这是您的问题,则需要更改C ++构建设置以使目标文件夹与托管应用程序文件夹相同。
您的代码是正确的 - 只要正确定义了QUERYSEGMENTATION_API宏并且您的dll实际上构建为“MyApplication.dll”
我会手动运行文件系统中的可执行文件 - 确保最新的exe和dll在同一个文件夹中,如果失败则运行depends.exe来计算它。