[英]C# DLLImport for C++ dll
我有一个.dll内置的C ++ / CLI和.NET。 因此,它的目标是.NET应用程序。 API是一组使用托管类型的包装器,因此它是.NET本机的。 我导入了.dll并添加了一个函数:
[DllImport(@"maplib.dll")]
public static extern bool initialize(string a);
当我在我的C#代码中调用此函数时,它工作正常,但如果我想添加另一个函数,如...
[DllImport(@"maplib.dll")]
public static extern bool initialize(string a);
public static extern bool runfile(string a, string b);
我运行程序时遇到此错误。 它与第二个功能有关:
“无法从程序集'myapp,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'加载类型'myapp.main',因为方法'runfile'没有实现(没有RVA)。”
为什么会出现此错误,如何解决?
如果需要两个函数,则必须添加两次DllImport
属性:
[DllImport(@"maplib.dll")]
public static extern bool initialize(string a);
[DllImport(@"maplib.dll")]
public static extern bool runfile(string a, string b);
但是,如果您的dll是.NET,那么为什么不只是添加一个常规引用并使用它就像使用C#代码一样?
据我了解,您已经创建了一个用C ++实现的托管类库。 您希望在其他托管代码中使用此类库(程序集)(使用C#,VB.NET等编写)。 目前,您已将一些方法(您的API)导出为本机C ++调用:
public bool initialize(string a) {
// ...
}
public bool runfile(string a, string b) {
// ...
}
如果您希望能够从本机C ++代码调用库,这很有用,但如果您只想使用托管代码调用库,我建议您将API创建为托管代码:
public ref class MyLibraryFunctions {
public:
static bool initialize(string a);
static bool runfile(string a, string b);
};
这样,您的C#代码中就不需要DllImport
。 你可以这样做:
using Something.MyLibrary;
....
public void doSomethingThatNeedsMyLibrary() {
MyLibraryFunctions.initialize(someString);
}
我希望我能正确理解你的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.