我想实现这样一个效果:
我用VC编写了个DLL ,VB 调用里面的一个函数,返回给VB一个字符串,
目前要不就是乱码,要不就是崩溃!我查了网上很多资料,都没有成功 !
请大虾们99999我啊 !
例子如下:
VC:
SQLCE3_DRIVER_API BSTR TestString(LPCTSTR InStr)
{ CString Buf;
Buf = "测试用例";
return Buf.AllocSysString();
}
VB:
Private Declare Function TestString Lib "Sqlce3_Driver.dll" Alias "?TestString@@YAPA_WPB_W@Z" (ByVal strS As String) As String
Dim a As String
a = TestString("这个参数没有意义")
我用VC编写了个DLL ,VB 调用里面的一个函数,返回给VB一个字符串,
目前要不就是乱码,要不就是崩溃!我查了网上很多资料,都没有成功 !
请大虾们99999我啊 !
例子如下:
VC:
SQLCE3_DRIVER_API BSTR TestString(LPCTSTR InStr)
{ CString Buf;
Buf = "测试用例";
return Buf.AllocSysString();
}
VB:
Private Declare Function TestString Lib "Sqlce3_Driver.dll" Alias "?TestString@@YAPA_WPB_W@Z" (ByVal strS As String) As String
Dim a As String
a = TestString("这个参数没有意义")
{ CString Buf;
Buf = "测试用例";
memcpy instr,&buf,sizeof(buf); '这里要复制,语法不知道对不对
return sizeof(buf);
}
VB里面:Private Declare Function TestString Lib "Sqlce3_Driver.dll" (ByVal strS As String,byval strLength as long) As long
Dim a As String,lRet as long a=space(255) '分配255个字符的空间,再传这个变量的地址进去
lret = TestString(a,255) 'lRet里是复制的字节数,上面函数里返回的.A里面就是复制的字符串,根据返回的字节数来取回有用的部分即可.
a = Space(9) '变量需要实例化
a = TestString("这个参数没有意义")
所以这个LZ的问题跟应该传入参数无关,可能是返回值的问题
VC中:void __stdcall fnTeststrdll2(LPSTR InStr)
{
int l=strlen(InStr);
strcpy(InStr,"测试用例");
}
VB中:Option Explicit
Private Declare Sub fnTeststrdll2 Lib "D:\VCCode\teststrdll2\Debug\teststrdll2.dll" (ByVal s As String)Private Sub Command1_Click()
Dim s As String * 32
Call fnTeststrdll2(s)
MsgBox s
End Sub
MsgBox出来的是乱码,方块状的东西,不是想要的结果"测试用例"
我是吧这段代码放在WINCE终端上运行的。其他的跟PC上一样
把dll编码中:
strcpy(InStr,"测试用例");
改成:
strcpy(InStr,_T("测试用例"));
试下。
CString s=_T("调试测试!");
int l=s.GetLength();
memcpy(Instr,s,l);
试下。不过可能还有问题,现在因为不会出现崩溃,只需要调试此dll即可,编码之间的转换有很多方法,慢慢整
还有,wince下不知道lz的dll用什么测试程序调用?貌似vb6的exe不能在ce下运行吧?
我们项目统一使用VS来开发的,所以。
现在我感觉就是编码的问题,在WINCE下,从VC的DLL提出来的字符串到VB就成乱码了,ANIS到UNICODE,现在正在试
使用你的代码
CString s=_T("调试测试!");
int l=s.GetLength();
memcpy(InStr,s,l);。目前在WINCE 下运行能出现
的字符有 : 调试K 。前面几个字符对了 。后面的还是乱码,这又是怎么回事呢