如何将某些C++方法转换为 C# 调用
How to convert some C++ method to C# call?
我有一个C++dll,在标头中包含此方法(C++代码):
enum Error
{
Error1,
Error2,
Error3,
}
void foo(const char* str, Error &err) ;
我正在尝试使用 DllImport 属性调用此方法,但没有成功。我可以毫无问题地调用此 dll 上的所有其他方法。
在DllImport上,我将foo方法转换为:
enum Error
{
Error1,
Error2,
Error3,
}
[DllImport("dll_name.dll")]
public static extern void foo(string str, ref Error err);
但这也不起作用。我还尝试在字符串上使用"MarshalAs(UnmanagedType.LPStruct)",并尝试更改 dllImport 属性 => 上的"CharSet",但没有任何效果
我会
尝试这个,我注意到缺乏空白。
enum Error
{
Error1,
Error2,
Error3,
}
[DllImport("dll_name.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void foo([MarshalAs(UnmanagedType.LPStr)] string str, ref Error err);
我还会确保该方法在您的应用程序中可见。由业力庞格注意到
编辑:您可以尝试更改调用约定。如果您得到的异常是堆栈不平衡,这应该可以解决问题。
相关文章:
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 将方法转换为调用该方法的成员函子对象会导致崩溃
- 模板类转换问题 - 无法推断调用的函数
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- Rcpp并行无匹配函数,用于调用"转换"
- 将手写循环转换为标准库调用
- 从基类实例调用派生类方法而不进行强制转换
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- C++函数调用中的自动转换和提升
- 为什么编译器抱怨 std::thread 参数在转换为右值后必须是可调用的?
- 为什么我的编译器在调用 const getter 函数时抛出"转换丢失(const)限定符"错误?
- 将调用类转换为库本身后,库头文件上没有这样的文件
- 从 cpp lib 调用函数时的数据类型转换
- 如何使用 CreateProcess 调用 tshark 将捕获文件转换为 txt
- 从基于迭代器的for循环转换后,如何在map::find()中调用方法
- glVertexAttribPointer调用中强制转换为void*是合法的C++吗
- 为什么转换运算符调用复制构造函数两次,而等效函数只调用它一次
- std::vector 范围构造函数可以调用显式转换吗?