iCAx开思工具箱

标题: Catia二次开发(读取配置文件) [打印本页]

作者: wfhelp    时间: 2007-3-19 11:58
标题: Catia二次开发(读取配置文件)
直接在VC6.0 中使用GetPrivateProfileString("CONNECTION","ServerName",NULL,   
  ServerName.GetBuffer(MAX_PATH),MAX_PATH,".//backup.ini");

是可以读取出来参数的,就是不知道怎样才能移植到CAA中使用,CString PathStr;
   GetPrivateProfileString("CONNECTION","athStr",NULL,   
  PathStr.GetBuffer(MAX_PATH),MAX_PATH,".//PathFile.ini");

这样使用的结果有错误:

error C2664: 'GetPrivateProfileStringW' : cannot convert parameter 1 from 'char [16]' to 'const unsigned short *'

请问如何解决,谢谢

作者: horizan    时间: 2007-3-19 12:04
字符集不一致的问题,转换一下就行了。
作者: wfhelp    时间: 2007-3-19 13:25
但是为什么上面的程序是我在VC里检查是对的,但是用在这里就会出错呢?
作者: wfhelp    时间: 2007-3-19 16:51
刚试了各种方法也还是不能成功,请问在CAA里有没有其他的函数能够解决读取ini或者txt配置文件?
作者: horizan    时间: 2007-3-19 19:24
VC默认字符集是ASCII码,CAA默认字符集是unicode码。

所以使用的时候要进行转换,具体的在MSDN或网上都能找到。
作者: wfhelp    时间: 2007-3-19 20:13
恩,现在有一个问题:
GetPrivateProfileString这个函数在CAA里使用不了,得到不了一个CString的值,所以也就不能再进行下面的CString转CATunicodeStr的操作了,我就是卡在如何得到ini配置文件参数这个地方了,请问应该如何能通过GetPrivateProfileString得到正确的参数或者在CAA里有没有别的函数能实现和其一样的功能呢?3Q
作者: horizan    时间: 2007-3-19 20:18
可以得到,只是你没有理解。

你的字符串也要进行转换,C++提供了方法,仔细查查!
作者: wfhelp    时间: 2007-3-20 08:48
是不是这样意味着我需要把GetPrivateProfileString("CONNECTION","ServerName",NULL,   
  ServerName.GetBuffer(MAX_PATH),MAX_PATH,".//backup.ini");中的参数全部转换成默认字符集是ASCII码的参数?
作者: wfhelp    时间: 2007-3-20 11:02
请问horizan,怎么转CSTring 到CATUnicodeString ?
查了CAA帮助BuildFromUTF16调用不管用CATUnicodeString::BuildFromUTF16(str),CATUnicodeString::BuildFromSTEP(str)
能否再提示一下?
作者: horizan    时间: 2007-3-20 12:30
通过BSTR过渡
作者: wfhelp    时间: 2007-3-20 13:16
我在上面的GetPrivateProfileString("CONNECTION","ServerName",NULL,   
  ServerName.GetBuffer(MAX_PATH),MAX_PATH,".//backup.ini");中就是通过在"CONNEXTION"和"ServerName"字符型参数前都加了(BSTR)后已经使得函数的错误不报了,现在正在测试得到的结果想把它转成CATUnicodeString在弹出窗口显示查看是否正确,所以问了上面的问题。感谢  
horizan  
的回答,我再找找如何利用BSTR过渡,如果还是不能解决我再问你
作者: wfhelp    时间: 2007-3-20 13:54
还要请问下:
我在测试时发生了如下问题
CString test = "D:\\backini.ini";
GetPrivateProfileString((BSTR)"CONNECTION",(BSTR)""LoginID",NULL,   
  LoginID.GetBuffer(MAX_PATH),MAX_PATH,test);
我这样写为了方便测试看取出的参数是否正确,我这样打印出的字符串为空,好象没有取出来,LoginID中没有任何数据?我是哪里出了错呢?如果直接把test内容打印出来就没有问题(我暂时还没有解决CString转CATUnicodeString,使用(char*)(test.AllocSysString())只能打印出第一个字母)
作者: acoka    时间: 2007-3-20 15:05
CString在VC2005已经不好用了

CATUnicodeString        sFilePath= "D:\\backini.ini";
wchar_t ws_filename[256]; //<- 最好取sFilePath的长度后用alloc动态定长
sFilePath.ConvertToWChar( ws_filename);
LPTSTR FileName = (LPTSTR)ws_filename;
作者: horizan    时间: 2007-3-20 16:55
CString到CATUnicodeString需要通过BSTR转换;

GetPrivateProfileString中的字符串应为_T(“你的字符串”)。
作者: horizan    时间: 2007-3-20 16:58
acoka说的对,有些东西直接用CUnicodeString还比较好。

CString和CUnicodeString属于两个类,中间没有直接的转换,并接两者支持的字符集也不同。所以必须将其转换一下。
作者: wfhelp    时间: 2007-3-20 21:13
谢谢两位的解答,下午没有时间上来看,晚上回家没有办法测试机器没有带回来
明天上班我去试试,再次感谢
作者: wfhelp    时间: 2007-3-21 13:25
那我是不是不能用GetPrivateProfileString取配置文件信息了?
GetPrivateProfileString(_T("CONNECTION"),_T("PathStr"),NULL,
        PathStr.GetBuffer(MAX_PATH),
        MAX_PATH,       
        _T("D:\\PathFile.ini"));
这个函数中的第四项参数应该如何使用才能得到正确的CATUnicodeString类型的参数呢?(这里的PathStr是CString类型的)




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3