我用以下方法定义了一个DLL,可执行到
filepath = ls_temp.c_str();时就出现错误,各位是什么原因呢?extern "C" __declspec(dllexport) void GetHisFilePath(CString &filepath)
{
char FileName [300];
string File;
::GetModuleFileName(0,FileName,300);//取得可执行文件名
int len = 0,find_old = 0,k = 0;
File = FileName;
len = File.length();
for(int i=1;i<=len;i=k+1)
{
k = 0;
k = File.find("\\",i);
if(k == -1)
break;
find_old = k;
}
string ls_temp;
ls_temp = File.substr(0,find_old); AfxMessageBox(ls_temp.c_str()); filepath = ls_temp.c_str();
}
filepath = ls_temp.c_str();时就出现错误,各位是什么原因呢?extern "C" __declspec(dllexport) void GetHisFilePath(CString &filepath)
{
char FileName [300];
string File;
::GetModuleFileName(0,FileName,300);//取得可执行文件名
int len = 0,find_old = 0,k = 0;
File = FileName;
len = File.length();
for(int i=1;i<=len;i=k+1)
{
k = 0;
k = File.find("\\",i);
if(k == -1)
break;
find_old = k;
}
string ls_temp;
ls_temp = File.substr(0,find_old); AfxMessageBox(ls_temp.c_str()); filepath = ls_temp.c_str();
}
{
char FileName [300];
string File;
::GetModuleFileName(0,FileName,300);//取得可执行文件名
int len = 0,find_old = 0,k = 0;
File = FileName;
len = File.length();
for(int i=1;i<=len;i=k+1)
{
k = 0;
k = File.find("\\",i);
if(k == -1)
break;
find_old = k;
}
string ls_temp;
ls_temp = File.substr(0,find_old); AfxMessageBox((char*)ls_temp.c_str());
filepath = (char*)ls_temp.c_str();
}
我修改成上面的语句,并在客户程序中分配内存空间也不行呀。
{
char FileName [300];
string File;
::GetModuleFileName(0,FileName,300);//取得可执行文件名
int len = 0,find_old = 0,k = 0;
File = FileName;
len = File.length();
for(int i=1;i<=len;i=k+1)
{
k = 0;
k = File.find("\\",i);
if(k == -1)
break;
find_old = k;
}
string ls_temp;
ls_temp = File.substr(0,find_old+1);
len = ls_temp.length();
ls_temp.copy(filepath,len); 我作以下修改即可
filepath[len] = '\0';
}