0

我正在开发一个项目,该项目使 C# 与以前在 C++ 中创建的 DLL 进行交互。下面的代码显示了我如何导出我需要的函数:

extern "C" __declspec(dllexport) int iterateAndTest(int testSize, char* testHash){

CUDADLL dll;
int ret = dll.iterateAndTest(testSize, testHash);
return ret;
}

下面的代码显示了我如何在 C# 中声明函数:

[DllImport("C:\\Users\\BrunoBraga\\Documents\\Visual Studio 2012\\Projects\\CUDADLL\\Debug\\CUDADLL.dll")]
public static extern int iterateAndTest(int testSize, string testHash);

问题是:dll 函数没有返回任何东西。事实上,dll 一旦被调用,就永远不会返回到 C# 并且程序只是结束。

我不确定我是否给出了正确的代码,但我想我缺少一些关于 dll 的东西。

很抱歉延迟回复。有两个问题: 1-当我创建对象时,我应该使用新的 CUDADLL dll。我认为我可以做到这一点,因为没有新的我仍然能够访问内部字段。

2-程序应该在admin下运行,否则会发生一些崩溃;

再次感谢各位。

4

1 回答 1

1

在您的 c++ 代码中插入__stdcall

extern "C" __declspec(dllexport) __stdcall int iterateAndTest(int testSize, char* testHash);

在 C# 中

[DllImport("yourdll.dll", EntryPoint="iterateAndTest", CallingConvention=CallingConvention.StdCall)]
public static extern int iterateAndTest(int testSize, string testHash);

在您的 C++ 函数中使用cout,如果调用该函数,则输出将显示在输出窗口中,如果您使用的是 Visual Studio。尝试将你的 c++ dll 放在你的输出目录中

可能的错误:找不到dll或将引发入口点异常。

于 2013-01-24T06:59:03.727 回答