vb 调用 VC 编译成功的 DLL 字符串处理函数出错
我编写了一段 VC 函数程序段,很简单,就是通过
该函数的唯一一个字符串,从该程序段中返回一个
字符串“Hello!”。该程序段作为一个 DLL 文件
的一部分似乎编译成功。但在用 VB 调用时,却
使系统出错。为什么?还请明眼人帮忙。
DLL 文件中的部分 VC++ 程序段如下:
double EXPORT fstrcmp(char *string1)
{
strcpy (string1, "Hello!");
return TRUE;
}
调用 DLL 文件中 fstrcmp 函数的 Vb 程序段如下:
Private Declare Function fstrcmp Lib "Gao.dll" (ByRef s1 As String) As Double
Private Sub Command1_Click()
x="Ninhao!"
ret = fstrcmp(x)
msgbox x
End Sub
问题点数:20、回复次数:8Top
1 楼NowCan(城市浪人)回复于 2001-03-18 10:06:00 得分 2
Private Sub Command1_Click()
dim x as string '加一句看看
x="Ninhao!"
ret = fstrcmp(x)
msgbox x
End Sub
Top
2 楼polytrans(polytrans)回复于 2001-03-18 11:22:00 得分 0
试过了,不行。我知道好象是字符串指针的毛病,但就是不知道怎样改Top
3 楼rememberME(wfj)回复于 2001-03-18 14:41:00 得分 10
用引用型试试。Top
4 楼cjm()回复于 2001-03-18 19:46:00 得分 2
看是不是char 和bstr的毛病,你可以用以下方式试一下:
double EXPORT fstrcmp(BSTR *string1)
{
_bstr_t aa;
strcpy (string1, "Hello!");
return TRUE;
}
Top
5 楼cjm()回复于 2001-03-18 19:51:00 得分 2
看是不是char 和bstr的毛病,你可以用以下方式试一下:
double EXPORT fstrcmp(BSTR *string1)
{
_bstr_t aa("Hello!");
BSTR cc=(BSTR)aa;
*string1=cc;
return TRUE;
}
Top
6 楼In355Hz(好象一条狗)回复于 2001-03-18 22:19:00 得分 2
我不太懂VB,但是VC中把按如下方式初试化的指针:char * pStr= "NinHao";
处理为字符串常量,不允许修改(如pStr[3] = 'd'就会报错),所以如果函数要修改传入的字串时,要这样做:
char pStr[20];
strcpy(pStr,"NinHao");
ret = fstrcmp(pStr);
如果VB和VC的常量处理方式一样的话,可能也有这个问题。不过我对VB的变量处理方式一无所知,以上完全是猜测,见笑了!Top
7 楼dawnsun(知之不多)回复于 2001-03-18 22:44:00 得分 2
查查你的EXPORT宏是不是有extern "C".Top
8 楼polytrans(polytrans)回复于 2001-03-20 19:50:00 得分 0
还是 rememberME 一语道破天机,加十分,其他各位热心参与,各给2 分,现程序修改如下:
DLL 文件中的部分 VC++ 程序段如下:
double EXPORT fstrcmp(LPCSTR& string1) 《========这是关键
{
strcpy (string1, "Hello!");
return TRUE;
}
调用 DLL 文件中 fstrcmp 函数的 Vb 程序段如下:
Private Declare Function fstrcmp Lib "Gao.dll" (ByRef s1 As String) As Double
Private Sub Command1_Click()
x="Ninhao!"
ret = fstrcmp(x)
msgbox x
End SubTop




