我正在尝试使用一些可导出的函数创建一个c#dll。然后我想要一个C ++ /非托管程序来加载.dll并在dll中调用一个特定的导出函数。
我正在使用Robert Giesecke's Unmanaged Exports。但它似乎不起作用。
我在调试器中运行了非托管程序,它成功执行 &#34; LoadLibrary()&#34; ,但是当它尝试 <时em>&#34; GetProcAddress(test_start)&#34; 呼叫失败并返回零。
这是我的c#代码:
using System.Runtime.InteropServices;
using RGiesecke.DllExport;
using etc...;
namespace test_dll
{
public class Class1
{
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllExport("test_start", CallingConvention = CallingConvention.Cdecl)]
public static void test_start()
{
MessageBox.Show("It works","YES");
}
}
}
.dll构建正常并且CPU匹配(x86),但是一旦加载了c#dll,非托管程序就无法获取导出函数地址。
现在它很基本,但我只是想让它发挥作用。我以后需要进口。
任何帮助,nuget包的文档都很薄。感谢
答案 0 :(得分:1)
嘿所以实际上我做得非常好。
很奇怪Robert Giesecke的Unmanaged Exports忽略了第一次出口?因此,我在下面创建的任何出口都有效并得到认可。
我检查了CFF资源管理器以查看有效的导出,除第一个之外的所有导出都在那里。所以我只留下了一个空白的出口。