c#互操作,没有找到库

C# Interop, Library Not Found

本文关键字:互操作      更新时间:2023-10-16

我计划将我的授权系统的核心转移到c++,但我仍然更喜欢。net前端进行设计。在任何情况下,我刚刚读完互操作功能,并决定把它进行测试。问题是,它在我这端工作得很好,但对其他用户来说就不行了。我让两个朋友在他们的电脑上测试了一个小程序,结果显示"无法加载xxx.dll"。找不到指定的模块。"

我让c#程序在与程序本身相同的路径中读取库,因此错误没有任何意义。如前所述,它对我来说工作得很好。

c#代码,

[DllImport("GuardImports.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string Gz_GetSystemKey();

我不能设置动态路径,因为DDLImport只接受常量变量。我想试试这样的东西,

private const string loc = Application.StartupPath + "/xxx.dll";

但是它显然不会工作,因为字符串不是常量。这个程序可以在这里下载(http://neetcloud.us/MqMIXc),如果有人感兴趣的话,没什么特别的。程序只是从库中接收一个散列字符串,并将其显示在消息框中。

根据评论中的讨论,您的问题似乎可能是您的c++ DLL是为调试而构建的,并且无法在没有安装Visual Studio的PC上运行。或者它可以,但是微软有各种各样的要求,并且说一般来说你不能这样做。

http://msdn.microsoft.com/en-us/library/aa985618.aspx

经过一个非常非常长的夜晚,我已经调试了这个问题。存在的问题是,我没有在预处理器定义中定义导出。现在一切都很顺利。感谢那些花时间支持我的人。