背景使用VBS脚本调用VC编译出来的DLL,传入实时大量数据。当前传入的LONG,DOUBLE等类型的数值都可以正常接收,但是当VBS向DLL函数传入String类型的数据时,VC端读出来都是乱码。代码说明//VC DLLDATAPROXY_API bool __stdcall SetData(WCHAR* szTimeStamp, float flAskPrice)
{
OutputDebugStringW(szTimeStamp); //这里出错
return false;
}'VBSDim TimeStamp
Dim PriceTimeStamp = "2010-10-5 9:03:28"
Price = 5628.00SetData(TimeStamp, Price) '指望这里能传送完整数据,但只有Price正常收到
值得讨论的几个问题我查了大量的VB和VC混合编程的资料,大体上理解了解决思路。VBS使用的是UNICODE编码的数据,上面的TimeStamp在被定义时就是UNICODE格式的。如果是发送给VB的函数,VB接收之后会自动转化成ANSI格式,但是传回的值仍会自动转化成UNICODE。问题是,当VB调用VC的DLL接口时,这个值肯定是UNICODE格式的,VC的函数不会自动转化。1. VB的String类型,实际上是BSTR,也就是一个指针,指向带有长度标识头的宽字符串内存区,这种说法对不对?
2. 当VB调用VC的DLL接口时,可以有两种方式,传值或传引用。但是我不明白的是VBS在调用VC的DLL时,用的是哪种方式?3. 虽然经过大量实验,但是仍然无法得出正确的结果。尝试了VC的Unicode向Ansi转化的函数,解析出来的值很奇怪,变成了2010-1-1 9:00:00,这是 什么?
4. 其它的转化方式,目前还没有尝试通过。特别是使用 _bstr_t 的方法,不知道如何加入comsupp.lib,很是苦恼。请VC和VB的高手解答!
{
OutputDebugStringW(szTimeStamp); //这里出错
return false;
}'VBSDim TimeStamp
Dim PriceTimeStamp = "2010-10-5 9:03:28"
Price = 5628.00SetData(TimeStamp, Price) '指望这里能传送完整数据,但只有Price正常收到
值得讨论的几个问题我查了大量的VB和VC混合编程的资料,大体上理解了解决思路。VBS使用的是UNICODE编码的数据,上面的TimeStamp在被定义时就是UNICODE格式的。如果是发送给VB的函数,VB接收之后会自动转化成ANSI格式,但是传回的值仍会自动转化成UNICODE。问题是,当VB调用VC的DLL接口时,这个值肯定是UNICODE格式的,VC的函数不会自动转化。1. VB的String类型,实际上是BSTR,也就是一个指针,指向带有长度标识头的宽字符串内存区,这种说法对不对?
2. 当VB调用VC的DLL接口时,可以有两种方式,传值或传引用。但是我不明白的是VBS在调用VC的DLL时,用的是哪种方式?3. 虽然经过大量实验,但是仍然无法得出正确的结果。尝试了VC的Unicode向Ansi转化的函数,解析出来的值很奇怪,变成了2010-1-1 9:00:00,这是 什么?
4. 其它的转化方式,目前还没有尝试通过。特别是使用 _bstr_t 的方法,不知道如何加入comsupp.lib,很是苦恼。请VC和VB的高手解答!
解决方案 »
- 在对话框中MS communication control (MSComm) 控件加载出奇怪问题(求救)
- 程序中如何调出控制面板里的 日期/时间 属性对话框?
- vista下音频控制 解决给400分
- 写一个ActiveX应该怎么写?
- 请教一段代码,不知道为什么while()循环得不到预期的结果?
- Picture控件的使用?
- 请教:不用MFC的COleDateTime和COleDateTimeSpan ,怎样得到两个DATE类型的变量的时间差(以分钟为单位),
- 求教*****有关dll显式调用*****急!
- VISUAL STUDIO当中那个版本跟VS6.0兼容最好
- 极力为大家推荐的一本好书!
- http网页数据包解码
- mfc 为视图添加一个背景图片
{
int *pint;
int imonth;
SafeArrayAccessData(*pp_matrix,(void **)&pint);
char *tmpstr = const_cast<char*>(LPCSTR(p_pay));
imonth=strlen(tmpstr);
int index[13];
getindex(tmpstr,index);
getmatrix(pint,index,imonth);
return 1;}
vb声明部分Option Explicit
Declare Function trans_matrix Lib "c:\vba\trans_matrix.dll" (ByVal paystr As String, ByRef pmatrix() As Long) As Long希望能对你有所帮助。
先一下
VBS应该支持的吧