B
Wie willst du inline Funktionen in eine DLL packen? Desweiteren ist es bei DLLs meistens das beste eine reine C Schnittstelle zu benutzen, hierfür wurden sie schließlich gebaut. Dein Beispiel würde ich folgendermaßen lösen.
dll.cpp
extern "C" int __stdcall WriteToMMF(char* name, const void*data, size_t size)
{
HANDLE mmf = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,
PAGE_READWRITE,0, size,name);
if(!mmf)
return 0;
LPVOID mem = MapViewOfFile(mmf, FILE_MAP_WRITE,0,0,size);
if(!mem)
return 0;
CopyMemory(mem, data, size);
CloseHandle(mmf); // Hast du vergessen glaub ich
return 1;
}
extern "C" int __stdcall ReadFromMMF(char* name, void*data, size_t size)
{
HANDLE mmf = OpenFileMapping(FILE_MAP_READ,FALSE,name);
if(!mmf)
return 0;
LPVOID mem = MapViewOfFile(mmf, FILE_MAP_READ,0,0,size);
if(!mem)
return 0;
CopyMemory(data,mem , size);
CloseHandle(mmf); // Hast du vergessen glaub ich
return 1;
}
dll.h
namespace dllimport{
extern "C" int __stdcall WriteToMMF(char* name, const void*data, size_t size);
extern "C" int __stdcall ReadFromMMF(char* name, void*data, size_t size);
}
template<class T>
bool WriteToMMF(const std::string&str, const T&t)
{
return dllimport::WriteToMMF(str.c_str(), &t, sizeof(T));
}
template<class T>
bool ReadFromMMF(const std::string&str, T&t)
{
retrun dllimport::ReadFromMMF(str.c_str(), &t, sizeof(T));
}
Ich hoffe dir ist bewusst, dass T ein POD sein muss?