【发布时间】:2015-05-20 04:08:11
【问题描述】:
我正在尝试在我的 c# 项目中包含 c++ 库 (DLL),但每次我这样做时,我都会在 VS2012 中收到以下错误消息
A reference to 'C:\Users\HiepDang\Desktop\mydll.dll' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.
当我尝试添加 Com+ 组件时,我在窗口中收到以下错误消息
一个或多个文件不包含组件或类型库。无法安装这些文件。
发生错误 80110425。
发生未知错误。您应该检查所有文档以获取解决方案。如果没有更多信息,请联系技术支持
我正在关注线程 here 和 here,但我的问题没有解决。
在 C++ 中,我可以像这样使用 dll:
//Header
extern "C" __declspec( dllimport ) int mymethod(const char *key, char *data, size_t buflen);
//Code test
const char* key = "test";
char* data = new char[1024];
int buflen = 1024;
int result = mymethod(key,data, buflen);
在 C# 中,我使用 dll 作为:
//define dll
[DllImport("mydll.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int mymethod([MarshalAs(UnmanagedType.LPTStr)]string key, [MarshalAs(UnmanagedType.LPTStr)]string data, uint buflen);
//method test
private static int testdll()
{
string key = "123456789";
string buf = string.Empty;
mymethod(key, buf, 1024);
return 0;
}
你能告诉我任何解决方案吗?
P.s: 我的英文不好。如有不便,敬请见谅
已编辑:我解释了 dll 中方法中的变量。 “key”作为字符串输入有8-13个字符,mymethod会被加密生成“buf”。我需要“buf”变量。
【问题讨论】:
-
如链接所说,使用
DllImport。 不要尝试通过右键单击引用并选择添加来添加引用。只需使用您现有的DllImportc# 代码 -
@MickyDuncan:感谢您的回复。但是我发布的 C# 代码不符合我的要求。当 mymethod 调用时,“buf”的值必须改变。按照 C# 代码,我只是收到一条错误消息,“'key' 的值无效”。当 key 的变量没有足够的 8 个字符时会发生这种情况。
-
更新您的问题以反映这些新要求
-
请在运行代码时填写完整的错误异常消息。它将帮助我们区分您的问题到底是什么。
-
@M.Mahdipour:C# 代码出现无异常错误。使用 C++ 代码,当我使用 key =“123456789”调用方法时,我得到 buf =“2995796360”。如果 key 不在 8-13 个字符之间,您必须收到消息:“'key' 的值无效”。所有返回的消息都是由其他人定义的。使用 C# 代码,当我使用 key = "123456789" 调用方法时,我会收到消息,例如 key has not 在 8-13 个字符之间。