分类:
2005-04-26 09:01:45
开发过程是这样的
首先用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位的数据类型,传送就没有问题了。经过实验完全没有问题了。
从这个问题可以看出,数据类型的基础一定要好好掌握。