DLL
От: Sein  
Дата: 20.05.04 13:12
Оценка:
Подскажите как в BuilderC++6 создать DLL которая бы содержала данные доступные для нескольких приложений одновременно? Т.е. как выделить общую память?
Re: DLL
От: Аноним  
Дата: 20.05.04 15:28
Оценка: +1
а CreateFileMapping + MapViewOfFile не спасут отца русской демократии?
Re: DLL
От: Sein  
Дата: 20.05.04 15:46
Оценка:
Вообще-то ноги растут от того что я собирался ставить хук, а там надо иметь DLL что бы её загружал любой процесс и имел доступ к одной и той же функции.
Re: DLL
От: Sein  
Дата: 20.05.04 18:00
Оценка:
Неужели никто никогда не писал DLL?
Ну помогите!!! Пожалуйста!!!
Re[2]: DLL
От: igdrasil  
Дата: 20.05.04 19:01
Оценка:
Здравствуйте, Sein, Вы писали:

S>Неужели никто никогда не писал DLL?

S>Ну помогите!!! Пожалуйста!!!

специально не поленился залезть в msdn:


// File:  DLLSHMEM.C. 
// The DLL entry-point function sets up shared memory using 
// a named file-mapping object. 

#include <windows.h> 
#include <memory.h> 
 
#define SHMEMSIZE 4096 
 
static LPVOID lpvMem = NULL; // pointer to shared memory
 
BOOL DllMain(HINSTANCE hinstDLL,  // DLL module handle
    DWORD fdwReason,              // reason called 
    LPVOID lpvReserved)           // reserved 
{ 
    HANDLE hMapObject = NULL;  // handle to file mapping
    BOOL fInit, fIgnore; 
 
    switch (fdwReason) 
    { 
        // The DLL is loading due to process 
        // initialization or a call to LoadLibrary. 
 
          case DLL_PROCESS_ATTACH: 
 
            // Create a named file mapping object.
 
            hMapObject = CreateFileMapping( 
                INVALID_HANDLE_VALUE, // use paging file
                NULL,                 // default security attributes
                PAGE_READWRITE,       // read/write access
                0,                    // size: high 32-bits
                SHMEMSIZE,            // size: low 32-bits
                "dllmemfilemap");     // name of map object
            if (hMapObject == NULL) 
                return FALSE; 
 
            // The first process to attach initializes memory.
 
            fInit = (GetLastError() != ERROR_ALREADY_EXISTS); 
 
            // Get a pointer to the file-mapped shared memory.
 
            lpvMem = MapViewOfFile( 
                hMapObject,     // object to map view of
                FILE_MAP_WRITE, // read/write access
                0,              // high offset:  map from
                0,              // low offset:   beginning
                0);             // default: map entire file
            if (lpvMem == NULL) 
                return FALSE; 
 
            // Initialize memory if this is the first process.
 
            if (fInit) 
                memset(lpvMem, '\0', SHMEMSIZE); 
 
            break; 
 
        // The attached process creates a new thread. 
 
        case DLL_THREAD_ATTACH: 
            break; 
 
        // The thread of the attached process terminates.
 
        case DLL_THREAD_DETACH: 
            break; 
 
        // The DLL is unloading from a process due to 
        // process termination or a call to FreeLibrary. 
 
        case DLL_PROCESS_DETACH: 
 
            // Unmap shared memory from the process's address space.
 
            fIgnore = UnmapViewOfFile(lpvMem); 
 
            // Close the process's handle to the file-mapping object.
 
            fIgnore = CloseHandle(hMapObject); 
 
            break; 
 
        default: 
          break; 
     } 
 
    return TRUE; 
    UNREFERENCED_PARAMETER(hinstDLL); 
    UNREFERENCED_PARAMETER(lpvReserved); 
} 
 
// SetSharedMem sets the contents of shared memory. 
 
VOID SetSharedMem(LPTSTR lpszBuf) 
{ 
    LPTSTR lpszTmp; 
 
    // Get the address of the shared memory block.
 
    lpszTmp = (LPTSTR) lpvMem; 
 
    // Copy the null-terminated string into shared memory.
 
    while (*lpszBuf) 
        *lpszTmp++ = *lpszBuf++; 
    *lpszTmp = '\0'; 
} 
 
// GetSharedMem gets the contents of shared memory. 
 
VOID GetSharedMem(LPTSTR lpszBuf, DWORD cchSize) 
{ 
    LPTSTR lpszTmp; 
 
    // Get the address of the shared memory block.
 
    lpszTmp = (LPTSTR) lpvMem; 
 
    // Copy from shared memory into the caller's buffer.
 
    while (*lpszTmp && --cchSize) 
        *lpszBuf++ = *lpszTmp++; 
    *lpszBuf = '\0'; 
}


вообще, научитесь пользоваться документацией
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.