c++ dll struct to c#
c++ dll struct to c#
可能的重复项:
将结构数组C++封送到 C# 中
我有一个C++ .dll,我必须将其与 C# 一起使用,但存在一些问题。首先,这是其中之一。
在这里使用C++ .dll文件,我必须在下面将C++结构重新更改为 C# 结构。请帮帮我。
C++结构 :
typedef struct USMC_Devices_st{
DWORD NOD; // Number of the devices ready to work
char **Serial; // Array of 16 byte ASCII strings
char **Version; // Array of 4 byte ASCII strings
} USMC_Devices;
结构USMC_DEVICES_st将转换为类似于以下内容的内容:
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
struct USMC_DEVICES_st
{
public UInt32 NOD;
public IntPtr serial;
public IntPtr Version;
}
访问串行和版本可以使用以下代码完成:
IntPtr ser;
for (var i = 0;
(ser = Marshal.ReadIntPtr(um.serial, i)) != IntPtr.Zero;
i += Marshal.SizeOf(ser))
{
var serial = Marshal.PtrToStringAnsi(ser);
}
编辑 - 在您的评论之后,下面是访问结构成员的更详细示例:
static void PrintDevices(USMC_DEVICES_st um)
{
const int serialSize = 16;
const int verSize = 4;
int j = 0;
for (var i= 0; i < um.NOD; i++, j+= IntPtr.Size)
{
var ser = Marshal.ReadIntPtr(um.serial, j);
var ver = Marshal.ReadIntPtr(um.Version, j);
// ensure we check for null pointers - just in case
if (ver == IntPtr.Zero || ser == IntPtr.Zero) break;
Console.WriteLine("Device {0}, tSerial number {1}",
Marshal.PtrToStringAnsi(ser, serialSize),
Marshal.PtrToStringAnsi(ver, verSize));
}
}
首先,如果你有C++ dll,那么你就可以将这些 dll 用于 C# 项目。 遵循以下方法
- 打开Visual Studio Command Prompt (Run as Administartor)
- 更改 dll 所在的路径 (cd C:/User/Douments/Visual Studio 2010/)
- 键入命令
tlbimp .dll/transform:dispret/out:
你会得到这样的结果。
Microsoft (R) .NET 框架类型库到程序集转换器 4.0.30319.1版权所有 (C) Microsoft 公司。 保留所有权利。
TlbImp:导入到 C:\Users\082043\Desktop\Interop.CACDirect 的类型库.dll
C:\用户\082043\桌面>
相关文章:
- "error: no matching function for call to"构造函数错误
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- C++Union/Struct位域的实现和可移植性
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- Arduino Uno - serial.read to a struct of bits
- c++ dll struct to c#
- Type def struct C objective to C++
- Python NamedTuple to C++ Struct