Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1981753
  • 博文数量: 221
  • 博客积分: 10045
  • 博客等级: 上将
  • 技术积分: 2252
  • 用 户 组: 普通用户
  • 注册时间: 2005-01-25 20:28
文章分类

全部博文(221)

文章存档

2012年(1)

2008年(4)

2007年(11)

2006年(26)

2005年(179)

我的朋友

分类:

2005-04-26 09:01:18

开发过程是这样的
首先用pro/c++编写pc文件,然后通过pro/c转换为cpp文件
然后再将cpp在vc环境下面编译成dll
最后在c#下面调用这个dll

可是调用的时候出现问题了
VC的函数是用CHAR *作为参数写的
例如
extern "C" __declspec(dllexport) int con_t_ora(char *Ldb_name,char *Lusername,char  *Lpassword,char *remsg,char *errormsg)
{

         .............

 MessageBox(NULL,Ldb_name,"sss",MB_OK);
 return 1;
}
而C#下面一般不提倡用指针的
我就使用了string作为传递参数
问题出现了
VC的DLL函数仅仅能接受第一个字符
也就是说
在C#下面调用并不是按照VC的方式调用的
C#下面取得首地址,并没有继续寻找地址
所以按照CHAR来处理的,而不是按照CHAR *处理的

不知道如何解决这个问题
经过试验,如果两边都声明为INT类型,是可以相互传递的

问题的关键在于C#中无论是STRING还是STRINGBUILDER或者CHAR都是16位的而在VC中CHAR是8位的,这就是为什么传送过去的时候会出现乱码了,只能传首地址过去,同时在传递变量后面加了两个00这样在VC的DLL中就不能按照8位地址去寻找,经查阅资料,使用BYTE[]作为传递变量,这样两个都是8位的数据类型,传送就没有问题了。经过实验完全没有问题了。

从这个问题可以看出,数据类型的基础一定要好好掌握。

阅读(2297) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~