【发布时间】:2018-05-31 08:32:40
【问题描述】:
我尝试通过 C++ 以编程方式更改我的 IP 地址。也许这是不可能的?我找到了这个代码++:
bool MyMethod(char oldIPAddress[], char newIPAddress[], char newMaskAddress[])
{
DWORD dwRetVal = 0;
PIP_ADAPTER_INFO pAdapter = NULL;
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
if (pAdapterInfo == NULL)
{
return false;
}
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
{
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
if (pAdapterInfo == NULL)
{
return false;
}
}
if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
{
pAdapter = pAdapterInfo;
while (pAdapter)
{
if (strcmp(oldIPAddress, pAdapter->IpAddressList.IpAddress.String) == 0)
{
IPAddr addr = inet_addr(newIPAddress);
IPMask mask = inet_addr(newMaskAddress);
ULONG context, instance;
if (DeleteIPAddress(pAdapter->IpAddressList.Context) != NO_ERROR
|| AddIPAddress(addr, mask, pAdapter->Index, &context, &instance) != NO_ERROR)
{
return false;
}
return true; // not return true
}
pAdapter = pAdapter->Next;
}
return false; // return false here
}
};
程序正在编译和运行,没有异常,但 MyMethod 总是返回 false。如果我使用 cmd>ipconfig - IP 地址仍然旧。我的错误在哪里?
【问题讨论】:
-
你是否调试过代码并检查它返回 false 的位置?
-
它返回
false,因为它失败了,你为什么期望cmd>ipconfig - IP返回除了旧地址之外的任何东西? -
另外,为什么这不会给您警告,方法可能不会在所有情况下返回
bool? -
@Philipp 它必须在这里返回
true-if (DeleteIPAddress(pAdapter->IpAddressList.Context) != NO_ERROR但这不会发生
标签: c++ windows networking