C++结构体
typedef struct tagtmcp_login_info
{
int ip_type;
int user_id;
int error_code;
int control_uint_id;
int privilege_code_size;
int* privilege_code_array;
char session_id[128];
bool login_result;
int userRightLevel;
tagtmcp_login_info()
{
privilege_code_array = NULL;
login_result = false;
}
~tagtmcp_login_info()
{
if(privilege_code_array)
delete [] privilege_code_array;
}
}tmcp_login_info, *ptmcp_login_info;
C#结构体
[StructLayout(LayoutKind.Sequential)]
public struct tmcp_login_info
{
public int ip_type;
public int user_id;
public int error_code;
public int control_uint_id;
public int privilege_code_size;
public int[] privilege_code_array;
public string session_id;
public bool login_result;
public int userRightLevel;
}
C++函数定义
TMCP_INTERFACE_SDK_API(int) tmcp_login_cms(const char* user_name,
const char* password,
tmcp_enum_login_types login_type,
ptmcp_login_info plogin_info,
const char* end_point_url,
const char* local_ip = NULL);
C#调用
[DllImport("tmcp_interface_sdk.dll", EntryPoint = "tmcp_login_cms", ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
private extern static int tmcp_login_cms(string user_name, string password, int login_type, IntPtr plogin_info, string end_point_url, string local_ip);
public static int call_tmcp_login_cms(string user_name, string password, int login_type, ref tmcp_login_info info, string end_point_url, string local_ip)
{
Type type = info.GetType();
int size = Marshal.SizeOf(type);
IntPtr pBuff = Marshal.AllocHGlobal(size);
int ret = tmcp_login_cms(user_name, password, login_type, pBuff, end_point_url, local_ip);
IntPtr ptr = new IntPtr(pBuff.ToInt64() + size);
Marshal.FreeHGlobal(pBuff);
tmcp_login_info plogin_info = (tmcp_login_info)Marshal.PtrToStructure(ptr, type);/*这行代码报错*/
return ret;
}
调用代码:
tmcp_login_info info = new tmcp_login_info();
call_tmcp_login_cms("admin", "12345", 0, ref info, "", "");
出错信息:
“System.AccessViolationException”类型的未经处理的异常出现在 mscorlib.dll 中。
其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
相关推荐
主要介绍了尝试读取或写入受保护的内存。这通常指示其他内存已损坏。的解决方法,有需要的朋友可以参考一下
资源代码演示的是c#代码调用c++ DLL 的方式。该演示为原创,绝非搬砖。解决了c# 调用 C++ Dll获取相关信息之如何传递结构体数组引用以及如何处理获取到的结构体数组数据的问题。
C#调用C++生成的DLL,并返回结构体引用或者结构体指针多个值,工程已编译好
C#调用C++DLL,C++DLL中的函数参数包含指针。 绝对可用。
下面小编就为大家分享一篇基于C#调用c++Dll结构体数组指针的问题详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
C#调用C++DLL传递结构体数组的终极解决方案 在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了。但是当传递的是结构体、结构体数组或者结构体指针的时候,...
C#调用C++ dll, 包括结构体, 数组, 函数指针, 字符串等等
c# 调用C++编写 的DLL函数各种参数传递问题。数据处理问题等等。
C#调用C++封装成DLL的结构体及类库, 使用数据结构类型, 使用动态库调用方式,函数入参为结构体,返回参数为结构体,使用out,ref 传统参数
c#调用c++ dll 传参 string 崩溃的一种解决办法
c#调用C++动态库、执行回调函数,并回传结构体参数数据。vs2017环境编写C#和C++动态库,这个为完整工程例子,可供相关人员学习参考。
c#调用c++DLL,DLL里是二维数组 ,c#里如何调用二维数组
c++调用C# COM 参数是结构体数组
1.C#调用C++封装的动态库dll ...3.C#结构体指针的调用演示 4.C#读取USB数据设备的示例 5.C#动态调用C++dll库示例 6.C#静态调用C++dll库示例 注意:UsbLibDotNet使用时候需要先安装驱动程序才可以正常使用。
c# Csharp调用 c++库 参数为导入和导出指针两种 包含C++ DLL源码 如fun(cont char* A,char*B) A为输入参数,B为输出参数-C# CSharp call C++ DLL lib dll function param use export and import eg: fun(cont char*...
因项目需要,要用C#程序调用C++的一个DLL库,了解到有个工具叫CLRInsideOut,其中一个的功能就是把C++下的结构体或者函数声明转换成C#下的定义,自动生成 C# 代码。 现上传上来,方便大家编码,给有需要的人,个人...
C#动态调用DLL文件(有的DLL是用C++或其它语言写的不能直接调用,但可以用态调用)
在C#编程中,常会用到C++中的dll类库,简单介绍一下它们的对应关系。