首页 新闻 搜索 专区 学院

C#调用C++的dll报错

0
悬赏园豆:20 [已解决问题] 解决于 2013-05-04 08:32

我用C#调用C++的dll里面的方法,报错,找了很久也不知道是什么原因,期待各位能不吝赐教。

C++中的方法:

int api_ihuConnect(char *server,char *user, char *password, long *IHServerHandle)

我在C#中的调用是:

[DllImport("tdll1.dll", EntryPoint = "api_ihuConnect",CharSet=CharSet.Ansi,CallingConvention = CallingConvention.StdCall)]
public static extern int Api_ihuConnect(string serverString, string userName, string pwdName, int serverHandler);

 

但是当我调用的时候报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

C#跟C++的类型应该没有转错吧,如果类型错了应该不是提示这个错误的,另外C++的long*类型,在C#中是哪一种类型呢?

找了很久,都找不到解决方法,希望各位能帮帮小弟,指点一二。

ljcheibao的主页 ljcheibao | 初学一级 | 园豆:132
提问于:2013-04-10 07:19
< >
分享
最佳答案
0

豆太少了.

 

 

vc++ char * , long * 指针类型 是有数据返回的,

 

long * IHServerHandle 可以转化为 out Int64 serverHandler 或者 ref Int64 serverHandler 或者 IntPtr serverHandler

 

char * server 可以转化为  [MarshalAs(UnmanagedType.LPTStr)] string server 或者 IntPtr server

 

 

 

两种写法

 

1.指针类型一般以 IntPtr

 

public static extern int Api_ihuConnect(IntPtr serverString, IntPtr userName, IntPtr pwdName, IntPtr serverHandler);

 

2.指针类型对应的定义

 

public static extern int Api_ihuConnect([MarshalAs(UnmanagedType.LPTStr)] string serverString, [MarshalAs(UnmanagedType.LPTStr)] string userName, [MarshalAs(UnmanagedType.LPTStr)] string pwdName, ref Int64 serverHandler);

收获园豆:20
DreamWu | 菜鸟二级 |园豆:228 | 2013-04-10 08:19

我也想给多点豆啊,不是我抠门,是我的豆太少了,真的很抱歉啊!如果是IntPtr类型的话,我怎么传参呢?比如:我要给ServerString给这个参数传入"192.162.0.9",我直接把这个字符串写上去就行了吗?

Api_ihuConnect(IntPtr serverString, IntPtr userName, IntPtr pwdName, IntPtr serverHandler);

调用

Int64 res=0;

Api_ihuConnect("192.162.0.9","heibao", "123456", res);

是不是这样调用就行了呢?

ljcheibao | 园豆:132 (初学一级) | 2013-04-10 14:08

@ljcheibao: 

 

那你就使用

public static extern int Api_ihuConnect([MarshalAs(UnmanagedType.LPTStr)] string serverString, [MarshalAs(UnmanagedType.LPTStr)] string userName, [MarshalAs(UnmanagedType.LPTStr)] string pwdName, ref Int64 serverHandler);

Int64 res=0;

Api_ihuConnect("192.162.0.9","heibao", "123456", ref res);

DreamWu | 园豆:228 (菜鸟二级) | 2013-04-12 09:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册