被指针搅昏了,帮忙看一下
最终目的就是把EXE中的buf指针指向线程中的s_TextStr,得到s_TextStr值
--------------------exe文件.cpp--------------------------------
AnsiString* buf;
typedef void __stdcall(*Text)(AnsiString*);
HMODULE hModule = LoadLibrary(AnsiString(ExtractFilePath(Application-> ExeName) +
"Text.dll ").c_str());
if (hModule)
{
Text ts = (Text)GetProcAddress(hModule, "ExecuThread ");
ts(buf);
}
ShowMessage(buf);
--------------------DLL.CPP-------------------------------------------
void __stdcall ExecuThread(AnsiString* s_RTextStr)
{
{
pThread-> SetRunParameter(s_RTextStr);
pThread-> Resume();
}
}
--------------------Thread.h-------------------------------------------
struct RunParameter //运行参数
{
AnsiString p_PathName;
AnsiString *s_RTextStr;
};
class TMyThread : public TThread
{
private:
AnsiString s_TextStr;
}
-----------------------MyThread.cpp-------------------------------------
void __fastcall TMyThread::Execute()
{
&s_TextStr = "aaa ";
RunParameter.s_RTextStr = &s_TextStr;
}
RunParameter * __fastcall TMyThread::SetRunParameter(AnsiString *s_RTextStr)
{
s_RTextStr = RunParameter.s_RTextStr;
}
以上是我写的代码,总感觉不对,就是不知道哪里不对,请指教。
[解决办法]
AnsiString s_TextStr;
&s_TextStr = "aaa ";//這樣操作,危險. 而且我懷疑能否通過編譯
相當於:
void *&p = &s_TextStr ;
p = "aaa " ;
也就是說:這個函數有問題:
-----------------------MyThread.cpp-------------------------------------
void __fastcall TMyThread::Execute()
{
&s_TextStr = "aaa ";
RunParameter.s_RTextStr = &s_TextStr;
//把一個(AnsiString *) RunParameter.s_RTextStr 指向一個(const char * ) "aaa "。
//應該不是你的目的。
}
[解决办法]
en ppower说的很对
在DLL中尽量不要使用String
而使用char *
还有记得内存释放