关于BCB和VB之间通过DLL进行数据交换的问题 |
缺席
|
laila
一般會員 發表:2 回覆:3 積分:1 註冊:2006-08-10 發送簡訊給我 |
现在与人合作,需要写一个BCB的DLL.
我的BCB的程序将通过这DLL和对方的一个VB程序交换数据. 因为我不懂VB.对DLL也是刚开始,尤其对BCB和VB程序如何共同工作很是模糊. 对方也不懂BCB.所以感到有困难. 我的BCB和DLL之间传递数据没有问题,但对方总无法读取DLL 不知我的DLL是否有问题.请高手指点. 程序如下: 1) DLL程序.shallvalue.cpp extern "C" __declspec(dllexport)void SetValue(int val); extern "C" __declspec(dllexport)int GetValue(); int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { return 1; } //--------------------------------------------------------------------------- 这是一个共享数据的class class SharedMemory { int *_data; HANDLE m_hMap; HANDLE m_hMutex; public: SharedMemory(); virtual ~SharedMemory(); inline int* GetData() { return _data; }; inline void SetData(int d) { *_data = d; }; // Lock with mutex void Lock() { ::WaitForSingleObject(m_hMutex, INFINITE); }; // Unlock with mutex void Unlock() { ::ReleaseMutex(m_hMutex); }; }; static const char *SHMEM = "MyShMemory"; // the name of sharememory object static const char *SHMEMMUTEX = "MyMutex"; // name of the mutex SharedMemory::SharedMemory() { // Try to create file mapping object (assume that this is the server) m_hMap = ::CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0, sizeof(int), // shared memory size SHMEM); // Check if file mapping object already exists. If it does, then this is a // client and in this case open existing file mapping object. Client also // needs to create a mutex object to synchronize access to the server if (GetLastError() == ERROR_ALREADY_EXISTS) { m_hMap = ::OpenFileMapping(FILE_MAP_WRITE,FALSE,SHMEM); } m_hMutex = ::CreateMutex(NULL,FALSE,SHMEMMUTEX); // Obtain a pointer from the handle to file mapping object _data = (int*)::MapViewOfFile(m_hMap,FILE_MAP_WRITE,0,0,sizeof(int)); } SharedMemory::~SharedMemory() { if (m_hMutex) ::CloseHandle(m_hMutex); ::UnmapViewOfFile(_data); ::CloseHandle(m_hMap); } SharedMemory sMemory; int GetValue(){ int *val; sMemory.Lock(); val = sMemory.GetData(); sMemory.Unlock(); return *val; } void SetValue(int val){ sMemory.Lock(); sMemory.SetData(val); sMemory.Unlock(); } 在VB中该如何调用SetValue(int val) 这个函数? 我在BCB中直接include这个C文件.工作正常.但似乎没有通过DLL.而是 两个C程序,直接交换数据. 但我用以下的方法调用DLL时,总是得不到GetValue,SetValue函数. HINSTANCE hLib; int ( __stdcall *MyDllGetValue )( ); hLib = LoadLibrary ( "ShareValueProject.DLL" ); if ( hLib == 0 ){ MessageBox ( NULL, "DLL not found.", "Error ", MB_SYSTEMMODAL ); return; } MyDllGetValue = (int ( __stdcall *)( ) ) GetProcAddress ( hLib, "GetValue" ); if ( MyDllGetValue == NULL ){ MessageBox ( NULL, "error.", "dddd", MB_SYSTEMMODAL ); } 请问我的DLL写法是否有错.还是调用有错. 谢谢. |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
|
laila
一般會員 發表:2 回覆:3 積分:1 註冊:2006-08-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |