I fix the "int index" to "long index".
but this has nothing in common with my issue.
"--== Alain ==--" <nospam@noemail.com> wrote in message
news:%23u3hXPL5GHA.4064@TK2MSFTNGP03.phx.gbl
I have an issue with loading a function from my DLL.
here is the DLL *.cpp file :
extern "C" __declspec(dllexport) LPTSTR GetString(int Index)
{
LPTSTR res="";
LoadString(GetModuleHandle(NULL),Index, res, sizeof(res));
return(_T(res));
}
Be aware that GetModuleHandle(NULL) returns an instance handle of the
EXE your DLL is loaded into, _not_ the DLL itself. If you hope to
load the string from the DLL's resources, this code does not do that.
LoadString epxects a pointer to an existing memory buffer as the
third parameter - it does not allocate memory for you. You are
giving it a pointer to read-only memory buffer of length 1, and lie
about this buffer's size. sizeof(res) is always 4 on 32-bit system -
it's the size of the pointer, not the size of the memory it points
to. _T("x") is a macro that expands to "x" in ANSI build, and to L"x"
in
Unicode build. It only makes sense to apply it to a string literal.
If you try to build Unicode build, you'll see an error on _T(res)
All in all, the code in GetString function does not make much sense.
here is my class which should load the DLL and open the function :
*.cpp file :
HINSTANCE CARDLLWrapper::InitializeLoc(CString DLLName)
{
m_hlibLoc=LoadLibrary(DLLName);
if (m_hlibLoc != NULL)
{
LocGetString = (LPTSTR)GetProcAddress(m_hlibLoc,
TEXT("GetString"));
LocGetString is not of type LPTSTR, so why do you cast the return
value of GetProcAddress to LPTSTR? Shouldn't you cast to the same
type LocGetString is declared with?
static LPTSTR (*LocGetString)(long);
GetString takes an int parameter. Why do you declare LocGetString to
take a long?