关于C# 调用 C++ 的DLL 的问题!

问题描述

C++代码:构造体:enumusb_relay_device_type{USB_RELAY_DEVICE_ONE_CHANNEL=1,USB_RELAY_DEVICE_TWO_CHANNEL=2,USB_RELAY_DEVICE_FOUR_CHANNEL=4,USB_RELAY_DEVICE_EIGHT_CHANNEL=8};/*usbrelayboardinfostructure*/structusb_relay_device_info{unsignedchar*serial_number;char*device_path;usb_relay_device_typetype;};C++调用方法名称:structusb_relay_device_infoEXPORT_API*usb_relay_device_enumerate(void);============================================C#构造体代码:publicclassCstruct{publicenumusb_relay_device_type{USB_RELAY_DEVICE_ONE_CHANNEL=1,USB_RELAY_DEVICE_TWO_CHANNEL=2,USB_RELAY_DEVICE_FOUR_CHANNEL=4,USB_RELAY_DEVICE_EIGHT_CHANNEL=8};[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]publicstructusb_relay_device_info{publicIntPtrserial_number;publicIntPtrdevice_path;publicusb_relay_device_typetype;}}C#调用C++DLL方法privatevoidbutton1_Click(objectsender,EventArgse){//查找设备[DllImport("usb_relay_device.dll",EntryPoint="usb_relay_device_enumerate",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]publicstaticexternCstruct.usb_relay_device_infousb_relay_device_enumerate();//查找设备Cstruct.usb_relay_device_infocs1=usb_relay_device_enumerate();}问:1我现在的问题是cs1取到的值都为0,不会报错2是不是我C#的构造体返回类型不应该是IntPtr。因为在C++中是指针的形式,所以在C#不知道如何定义

解决方案

解决方案二:
char*,unsignedchar*直接使用byte或者string。
解决方案三:
大神数据结构改成byte返回类型后[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]publicstructRESULT{publicbyteserial_number;publicbytedevice_path;publicRESULT_typetype;}得到的值为:serial_number=39device_path=160type=一个随机的9位数字如:127598964问:serial_number和device_path的值是固定的,现在不知道怎么操作这个BYTE了,

时间: 2024-09-24 03:38:10

关于C# 调用 C++ 的DLL 的问题!的相关文章

C#/C++/CLI运行效率测试之二 Native C++调用Native C++ DLL

本文分为两方面 一.Native C++调用Native C++ DLL 并测试运行时间 二. 完全由C# 实现运算代码 并测试运行时间 详细过程: 一: 至于如何获取EfficiencyNativeCPPDLL.dll 和 EfficiencyNativeCPPDLL.lib 以及生成项目EfficiencyNativeCPPDLL 本文讲述在VS2010中本地C++调用C++类库以进行效率测试 1. 常见Win32控制台应用程序 ConsoleCPPInvokeDLL 2.选择下一步点击完成

com-C++ 如何调用Delphi的dll文件中的COM方法

问题描述 C++ 如何调用Delphi的dll文件中的COM方法 请问 C++ 如何 调用 Delphi 的dll文件中的COM方法 解决方案 只要是COM就遵守COM的规范,Delphi写出来的COM和其他语言写出来的COM用法是一样的

c++-【下跪】PB调用C的DLL报错

问题描述 [下跪]PB调用C的DLL报错 一下是文档中的结构体: typedef struct{byte Track2[37]; /*二磁道信息 ,asc格式 最长37个字节 */byte Track3[104]; /*三磁道信息 asc 格式 最长 104个字节*/byte Pwd[8]; /*加密后的密码 8个字节 */byte Amount[12]; /* 金额, 分为单位000000000001 代表1分不允许0金额积分兑奖时为积分*/byte Trace[6]; /* 终端流水,不是动

dll c#-c#调用c++的dll出现尝试读取或写入受保护的内存问题

问题描述 c#调用c++的dll出现尝试读取或写入受保护的内存问题 使用c#调用c++的一个dll.c++的接口函数为: extern "C" __declspec(dllexport)bool __stdcall CreateDetmObject(IDetManager **ppDetManager); 参数IDetManager为一个结构体: struct IDetManager { virtual void __stdcall SetListener(HWND hWnd) = 0

.net-C#调用c++的dll执行带字符串参数的函数时遇到的问题

问题描述 C#调用c++的dll执行带字符串参数的函数时遇到的问题 我在c++项目中实现函数: extern "C" __declspec(dllexport) int FUNC1(const char* xmlSta, char* fileOut) { return 0; } 然后编译成动态库a.dll,并在C#项目中引用, 用静态加载的方式,是可以运行的,代码如下(只写调用的部分): [DllImport("a.dll", EntryPoint = "

swmm dll-怎样C#调用swmm的dll

问题描述 怎样C#调用swmm的dll 自己做了一个ARCGIS二次开发界面,结合swmm软件进行管网分析,现在已经实现shp转 inp,但是不会读取swmm分析后的输出文件即out 文件,它是二进制文件,不会读取,现在 需要读取out文件,并添加到自己设计的界面中的属性表中,在设计的界面中显示地图,并能查询积水情况,谢谢大家! 解决方案 ?????每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用DLL的方法进行介绍.首先,您需要了解什么是托管,什么是非托管.一般可以认为:非托管代码主

c# dll-c#调用C++的DLL时调用失败

问题描述 c#调用C++的DLL时调用失败 本人C#小白.老大要求用C#调用C++的DLL.C++的我写出来了,可以调用成功.#include #include void main(){ HMODULE hModule = ::LoadLibrary(_T(""C:CT_InfoTerm.dll"")); typedef LONG (WINAPI pDLLProc)(intcharintintintchar*int); pDLLProc dllfunc; int i

c语言-VB 调用crc16校验 dll 返回值不正确

问题描述 VB 调用crc16校验 dll 返回值不正确 真诚求助,其实什么都写好了就是关键时候掉链子了 如下: C语言写的CRC16 半字节查表 方式校验,dll cpp 程序如下: unsigned short _stdcall CalCRC16(unsigned char *ptr, unsigned char len) { unsigned short crc; unsigned char da; unsigned short crc_ta[16]={ 0x0000,0x1021,0x2

activex-C#开发ActiveX控件调用动态库DLL

问题描述 C#开发ActiveX控件调用动态库DLL 我想开发一个C# ActiveX控件调用动态库DLL,能够在网页中使用,创建ActiveX控件我已经完成了,但调用DLL动态库没有相应的反馈给我,就像没有做任何操作一样,网上说把动态库DLL放到windows/System32下面,可以调用成功,但我照做了,还是没有反应,我的系统是WIN732位,动态库DLL在C/S程序下调用是没有问题,希望高人帮忙解答下,如果对问题有什么不明白之处,可以留言,谢谢 解决方案 ActiveX控件需要注册(命令

asp.net webservice调用Delphi的dll

问题描述 asp.net webservice调用Delphi的dll asp.net webservice调用Delphi的dll,执行方法Init(连接Oracle数据库),报错连接超时. 建立个winform程序,调用Init函数可通过,但webservice就是不行. 我是发布在服务器server 2003 32位, IIS发布,发程序发布的文件扔到IIS根目录,dll文件在bin目录下. 调用的这个dll文件又调用了另一个dll,2个dll文件都扔到bin目录下了.不知道是什么原因,w