关于VB.net调用C生成的dll,遇到的比字符集不匹配还纠结的问题

升级项目。从6.0到2012。
升级后出现调用dll中c的方法:
DLLEXPORT BOOL WINAPI InsUpdDel( LPSTR lpSqlStr, LPRTNINFO RtnInfo )
其中 LPSTR lpSqlStr 是_char × 类型,在API _winnt.h中定义:
winnt.h

// ANSI (Multi-byte Character) types
//
typedef Null_terminated CHAR *NPSTR, *LPSTR, *PSTR;
为传入的sql,LPRTNINFO RtnInfo 是自己在头文件中定义的构造体构造体:
typedef struct {
long ErrCode;
char ErrMsg[71];
} RTN_INFO;

typedef RTN_INFO* LPRTNINFO;
_当ErrMsg 传入汉字时,报错:传递给系统调用的数据区域太小。HERSULT:0x8007007A。
当lpSqlStr传入汉字时,却不会报错。
求大神指点,这到底是怎么一回事?
vb中如果要改,实在太麻烦,有没有什么能够在VC下修改的方法?

2个回答

如果是该vc,那么就第二个参数也用LPSTR类型好了。再加一个int类型等做errorcode

chen_zhi_heng
忧灵 解决了。没有改动C,我把VB中声明构造体中的ErrMsg由Public ErrMsg()as char 修改为了一个vb固定长的 Public ErrMsg as String,就行了。
大约 5 年之前 回复

VB6的所有整数类型在VB.NET中都扩大了一倍。
比如short相当于原来的integer,integer相当于long,而VB.NET的long就是64bit的了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问