我的问题,比较棘手

maxsuy 2001-12-21 02:19:19
我用VC,做一个DLL,
在VB里调用为什么总是提示,操作非法?
extern "C" _declspec(dllexport) char * GetLocalIp(void)
{
WORD wVersionRequested;
WSADATA wsaData;
char name[255];
char ipad[100];
CString ip;
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 2, 0 );

if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{

if( gethostname ( name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
strcpy(ipad, LPCSTR(ip));
return ipad;

}
}

WSACleanup( );
}
return "";
}

这是DLL的内容。

VB内容如下:
Declare Function GetLocalIp Lib "test.DLL" () As String
On Error Resume Next
Dim s As String
s = GetLocalIp
MsgBox Err.Description
...全文
70 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mahongxi 2001-12-21
  • 打赏
  • 举报
回复
同意楼上,特别注意 __stdcall!
zyme007 2001-12-21
  • 打赏
  • 举报
回复
DLL这样定义:
extern "C" _declspec(dllexport) _stdcall char * GetLocalIp(void)
maxsuy 2001-12-21
  • 打赏
  • 举报
回复
照这样方法修改后仍然非法操作?
另有dim s as string *123
与定义dim s(1 to 123) as byte有区别吗
zzh 2001-12-21
  • 打赏
  • 举报
回复
VB中是采用COM接口的,支持双字节,而你使用CHAR*是单字节的,在VB中你应该这样定义
Declare Function GetLocalIp Lib "test.DLL" () As String
On Error Resume Next
Dim s As String *1023 // 分配内存,不能直接定义一个字符串变量。
s = GetLocalIp
MsgBox Err.Description


16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧