这几天一直都在一个问题上纠结,怎么弄都不行,求大神指导。本人新学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));
急用!
把 char 替换成 wchar_t
不行啊,选了这个以后,一样只能读256个字节。而且,后面fread(buf,1,len,fp)时,读到buf中的变成了乱码。(_wfopen_s(&fp,L"R001ST110.xml",L"r,ccs=UNICODE") 用这个打开的文件)
字段可能被屏蔽了,实际上还是有的,不好意思