Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: IPv6地址

6 views
Skip to first unread message

meteors

unread,
Aug 11, 2004, 7:01:59 AM8/11/04
to
没有遇到过这种问题啊
DLL中,
extern "C"
{
....
....
char* GetIP()
{
char* pStr = "xxxx";
return pStr;
}
}

在C#中,
[DllImport(@"xxxxx.dll")]
private static extern string GetIP();

然后再调用,没有问题啊。很顺利。

"FrankJiao" <jia...@hotmail.com> wrote in message
news:559EABFE-F3F5-425F...@microsoft.com...
> 在VC环境下写了一个获取IPv6地址的类,并且已经得到所需要的值。
> 然后将对应的方法封装为一个DLL(C++),但在C#中调用DLL时出现返回值错误,
具体如下:
> 1、DLL中获取地址的函数返回值为char*,在C#中引用的时候改为StringBuilder(尝
试过string,但效果一样),调试结果在C#中得到是实际本机IPv6地址的一部分加上乱

> 2、尝试在DLL中不做任何处理直接用hard code返回IPv6的地址字符,返回结果正
常,即在C#中得到DLL中返回的地址字符
> 3、尝试在DLL中每次返回第一步中得到IPv6地址的单个字符,发现实际上每一个字符
都是正确的,而且这些单个字符组合起来就是本机IPv6地址
> 那位大侠有过关于在C#中调用DLL且返回字符串的经验(不一定必须要返回值为字符
串,但在C#中得到字符串),兄弟在这先谢过了,项目已经因为我延期了,在搞不定死
大了


FrankJiao

unread,
Aug 11, 2004, 7:59:02 AM8/11/04
to
谢谢meteors的解答,但你说的我已经试过是正确的,我这里跟你说的有点不通。

C#中的调用跟你说的一样就不写了,DLL原型为:
extern "C"
{
char* GetIPAddr(int Family,int SocketType,char* Address,char* Port)
{
char AddrName[ 100];
//char* temp = "fe80::206:1bff:feca:46ce%4";
char* temp;
//return temp;
int RetVal;
BOOL RunForever = FALSE;
WSADATA wsaData;
ADDRINFO Hints, *AddrInfo, *AI;

if ((RetVal = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
{
WSACleanup();

return "";
}

memset(&Hints, 0, sizeof(Hints));
Hints.ai_family = Family;
Hints.ai_socktype = SocketType;
Hints.ai_flags=AI_CANONNAME;

//解析主机/服务器获取其IP 地址
RetVal = getaddrinfo(Address,Port, &Hints, &AddrInfo);

if (RetVal != 0)
{
WSACleanup();

return "";
}

//将IP 地址转换成数字式字符文本
for (AI = AddrInfo; AI != NULL; AI = AI->ai_next)
{
if (getnameinfo(AI->ai_addr,
AI->ai_addrlen,
AddrName,
sizeof(AddrName), NULL, 0,
NI_NUMERICHOST) == 0)
{
break;
}
}
temp = AddrName;
WSACleanup();

//return AddrName;
return temp;
}
}
直接返回字符串是没有问题,但不知道为什么处理之后返回的值就有问题,但这段代码我在VC环境中使用的时候没有一点问题,大侠们帮我看看到底什么问题

“meteors”编写:

> 没有遇到过这种问题啊
> DLL中,
> extern "C"
> {
> .....
> .....

hk4...@gmail.com

unread,
Jul 22, 2013, 8:53:44 AM7/22/13
to
0 new messages