举个例子,INI文件的内容如下:[10.110.114.22]
COUNT=1
1=FFFFFF11
[10.110.114.27]
COUNT=2
1=FFFFFF21
2=FFFF01FF
[192.168.0.81]
COUNT=1
1=001FF001
[192.168.0.82]
COUNT=3
1=002FF001
2=F00FFFFF
3=FFFFF456这个INI文件里,实际上存储的是一张IP与ID的对应关系表,IP与ID为一对多的关系映射。一个IP对应的ID数目不确定,个数由COUNT给出。我现在需要实现的是,给出一个ID号,要能从INI文件中,查找出其ID对应的IP是多少?。。 不考虑ID出现相同的情况。
比如:我输入“F00FFFFF”,要能得出其IP为192.168.0.82。小弟很菜!还请各位大哥、大姐多多照顾 :)
谢谢先
COUNT=1
1=FFFFFF11
[10.110.114.27]
COUNT=2
1=FFFFFF21
2=FFFF01FF
[192.168.0.81]
COUNT=1
1=001FF001
[192.168.0.82]
COUNT=3
1=002FF001
2=F00FFFFF
3=FFFFF456这个INI文件里,实际上存储的是一张IP与ID的对应关系表,IP与ID为一对多的关系映射。一个IP对应的ID数目不确定,个数由COUNT给出。我现在需要实现的是,给出一个ID号,要能从INI文件中,查找出其ID对应的IP是多少?。。 不考虑ID出现相同的情况。
比如:我输入“F00FFFFF”,要能得出其IP为192.168.0.82。小弟很菜!还请各位大哥、大姐多多照顾 :)
谢谢先
http://www.codeproject.com/cpp/cinifile.asp
等待更好的方法
#include <stdlib.h>
#include <stdio.h>#define MY_STR_LEN 256char* ReadLine( FILE* fp, char* sBuf, int nCount);
int FindChar(const char* str, char c);
char* FindIpById(FILE* fp, const char* str);void main()
{
FILE* fp = fopen("I:\\id.txt","rt");
if(!fp)
{
printf("%s","Open file failed!\n");
return;
} char str[245] = {0};
while(strcmp(str, "quit"))
{
printf("%s","Enter a ID:");
scanf("%s", str);
if(!strcmp(str,"quit"))
break;
printf("%s\n",FindIpById(fp, str));
fseek(fp,0,SEEK_SET);
} fclose(fp);
}char* ReadLine( FILE* fp, char* sBuf, int nCount)
{
char c;
for(int i=0; !feof(fp) && i<nCount-1; i++)
{
fread(&c ,1 ,1 ,fp);
if(c == 10)
{
sBuf[i] = 0;
return sBuf;
}
else
{
sBuf[i] = c;
}
}
sBuf[nCount-1] = 0;
return sBuf;
}int FindChar(const char* str, char c)
{
for(int i=0; str[i]; i++)
{
if( c == str[i])
return i;
}
return -1;
}char* FindIpById(FILE* fp, const char* str)
{
char sIP[MY_STR_LEN] = {0};
char sID[MY_STR_LEN] = {0};
int i; while( !feof(fp))
{
ReadLine(fp, sIP, MY_STR_LEN); ReadLine(fp, sID, MY_STR_LEN); i = atoi(&sID[FindChar(sID, '=' ) + 1]); for(; i > 0; i--)
{
ReadLine(fp, sID, MY_STR_LEN);
if(! strncmp(&sID[FindChar(sID, '=') + 1], str, 8))
return sIP;
}
}
return NULL;
}
这个程序完全是根据你的这个文件的结构写的.所以一旦文件格式改变,这个程序也就废了.
http://ruguo20.blogchina.com/ 这里有介绍那个几个API的!~
http://xufiles.bokee.com/2942626.html
遍历一遍INI就可以了!~
{
CString str_id,buf[10];
char bf[100];
int i=0,j,k,count;
GetPrivateProfileSectionNames(bf,2000,filename);
buf[i++]=bf;
for(j=0;j<100;j++)
{
if(bf[j]=='\0')
{
if(bf[j]==bf[j+1]) break;
else buf[i++]=&bf[j+1];
}
}
for(j=0;j<i;j++)
{
count=GetPrivateProfileInt(buf[j],"COUNT",1,filename);
for(k=1;k<=count;k++)
{
char t[4];
itoa(k,t,10);
GetPrivateProfileString(buf[j],t,"1",str_id.GetBufferSetLength(100),100,filename);
if(id==str_id)
{
return buf[j];
}
}
}
return "";
}
#define MAX_T 15000
CString GetIP(CString id,CString filename) //filename为ini文件的地址全称
{
CString str_id,buf[MAX_S];
char bf[MAX_T];
int i=0,j,k,count;
GetPrivateProfileSectionNames(bf,MAX_T,filename);
buf[i++]=bf;
for(j=0;j<MAX_T;j++)
{
if(bf[j]=='\0')
{
if(bf[j]==bf[j+1]) break;
else buf[i++]=&bf[j+1];
}
}
for(j=0;j<i;j++)
{
count=GetPrivateProfileInt(buf[j],"COUNT",1,filename);
for(k=1;k<=count;k++)
{
char t[4];
itoa(k,t,10);
GetPrivateProfileString(buf[j],t,"1",str_id.GetBufferSetLength(20),20,filename);
if(id==str_id)
{
return buf[j];
}
}
}
return "";
}
因为我现在是在写DLL,我想导出函数应该不能用CString类型做参数吧?是不是导出函数的参数得用最基本的数据类型?可能调用此DLL的应用程序有可能是用VC 或 VB 或 Delphi写的。。
例如:
CString str1; char* str2=NULL;
str1="A10B0CA5002FF001F1F2F3F4";
怎么让 str2 也等于"A10B0CA5002FF001F1F2F3F4" ? 难道是 str2=str1;??不好意思!我太弱了 谢谢
#define MAX_T 15000
char* GetIP(char* id,char* filename)
{
char idd[100],*buf[MAX_S],bf[MAX_T];
int i=0,j,k,count;
GetPrivateProfileSectionNames(bf,MAX_T,filename);
buf[i++]=bf;
for(j=0;j<MAX_T;j++)
{
if(bf[j]=='\0')
{
if(bf[j]==bf[j+1]) break;
else buf[i++]=&bf[j+1];
}
}
for(j=0;j<i;j++)
{
count=GetPrivateProfileInt(buf[j],"COUNT",1,filename);
for(k=1;k<=count;k++)
{
char t[4];
itoa(k,t,10);
GetPrivateProfileString(buf[j],t,"1",idd,100,filename);
if(strcmp(id,idd)==0)
{
return buf[j];
}
}
}
return "no ip correspond to the id!";
}
__declspec(dllexport) CString __stdcall GetIP(CString id,CString filename);是用前者,还是选择后者? 在DLL的导出函数的参数,是不是不能用 CString ?必须用基本数据类型char* 么?
SendMessage 函数可以吗?如果可以的话,那么它的调用参数,该如何给出呢?谢谢先!请达人来帮帮忙。
extern "C" __declspec(dllexport) int __stdcall fun(int x1,int x2,int x3);
extern "C" __declspec(dllexport) BOOL __stdcall PlayAudio(CHAR *pData, DWORD nLen);
extern "C" __declspec(dllexport) BOOL __stdcall PlayVideo(INT decoder, CHAR *pData, DWORD nLen, LPRECT lprect);
这是我DLL源代码里定义的导出函数,不过我发现用Dependency Walker打开DLL,看到的函数名变成了:
_fun@12
_PlayAudio@8
_PlayVideo@16
??? 这是怎么回事? 怪不得我用 VC 写了个应用程序,GetProcAddress,取不到对应的函数呢。。
BOOL bSucc = m_sock_control.CreateSocket(Port_Control);
if(!bSucc)
{
AfxMessageBox("创建网络套接字失败\n" ,
MB_ICONERROR|MB_OK);
return -1;
}
m_sock_control.SetRecvCallBack(listen_control_channel,this);
class CNetwork
{
public:
CNetwork();
virtual ~CNetwork();
int InitNetworkA();
public:
CMySocket m_sock_video;
CMySocket m_sock_audio;
CMySocket m_sock_control;
};哎!上面的问题,怎么就没高手过来,给我解释下呢
期待中ing
我很菜的,请高手来解答下!