首页 新闻 会员 周边

vc中BSTR的使用问题

0
悬赏园豆:80 [已关闭问题] 关闭于 2016-01-18 13:56

这几天一直都在一个问题上纠结,怎么弄都不行,求大神指导。本人新学vc++。

我用clr类库创建了一个动态库dll,动态加载这个dll时,遇到了一个问题,在我的dll中有个一个读取文件的函数。

 1 char* GetFile(char* filename)
 2 {
 3     char* buf;
 4     FILE *fp;
 5     fopen_s(&fp,filename,"r");//获取文件的指针
 6     if(fp!=NULL)
 7     {
 8         fseek(fp,0,SEEK_END);//把指针移动到文件的结尾,获取文件长度
 9         int len =ftell(fp);//获取文件长度
10         buf=new char[len];//定义文件指针
11         rewind(fp);//把指针移动到文件开头 因为我们一开始把指针移动到结尾,如果不移动回来 会出错
12         int sizet=fread(buf,1,len,fp);//读文件
13         buf[sizet]='\0';//把读到的文件最后一位 写为'\0' 要不然系统会一直寻找到0后才结束
14         fclose(fp);//关闭文件
15     }
16     return buf;
17 }

获取到文件内容后,准备把值赋给bstr类型变量,但是由于是加载的外部dll,所以公共语言运行时的选项是:clr。这导致赋值时不完整,bstr变量只能接收256个字节,多余的全部丢了,如果选无运行时语言支持,则可以得到完整的值。

现在,我就想知道怎么在选择了公共语言运行时的情况下,bstr变量能得到完整的值。

_bstr_t pointDefination=bstr_t(GetFile(definename));

 

急用!

blackday的主页 blackday | 初学一级 | 园豆:118
提问于:2016-01-07 17:43
< >
分享
所有回答(2)
0

把 char 替换成 wchar_t

Launcher | 园豆:45045 (高人七级) | 2016-01-08 09:16

不行啊,选了这个以后,一样只能读256个字节。而且,后面fread(buf,1,len,fp)时,读到buf中的变成了乱码。(_wfopen_s(&fp,L"R001ST110.xml",L"r,ccs=UNICODE") 用这个打开的文件)

支持(0) 反对(0) blackday | 园豆:118 (初学一级) | 2016-01-08 11:20

支持(0) 反对(0) blackday | 园豆:118 (初学一级) | 2016-01-08 11:22
0

字段可能被屏蔽了,实际上还是有的,不好意思

blackday | 园豆:118 (初学一级) | 2016-01-13 16:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册