2013年12月29日 星期日

20131229 DLL共用記憶體--設定data_seg

不是使用share memory的coding 方式
http://msdn.microsoft.com/zh-tw/library/h90dkhs0(v=vs.90).aspx
{
微軟的教學裡面有打錯字TMD.   
下面這2行沒有批配, 害我compiler後,沒達到效果
(".myseg")
/SECTION:.MYSEC,RWS
}
data_seg 可以用來建立一個新的具名區段 (在此範例為 MYSEC)。最常見的用法,是清楚地呼叫資料區段 .shared。
接著您必須在 .def 檔中或是使用連結器選項 /SECTION:MYSEC,RWS,為這個新的具名資料區段指定正確的共用屬性。

http://stackoverflow.com/questions/17700409/create-a-dll-to-share-memory-between-two-processes  範例


#pragma data_seg ("MYSEC")  重點在這裡"MYSEC" 這字串要和  連結器選項中的字串一模一樣(含大小寫)  /SECTION:MYSEC


dlltest.h
#ifndef _DLLTEST_H_
#define _DLLTEST_H_

#include <iostream>
#include <stdio.h>
#include <windows.h>

extern "C" __declspec(dllexport) int get();
extern "C" __declspec(dllexport) void set(int temp);


 #endif
dlltest.cpp
#include "dlltest.h"

#pragma data_seg("SHARED")
int x = 0;
#pragma data_seg()

extern "C" __declspec(dllexport)

int get()
{
    return x;
} 

extern "C" __declspec(dllexport)

void set(int temp)
{
    x = temp;
}

#pragma comment(linker, "/section:SHARED,RWS")  



===========================================
使用MT4的dll可以不用放在 library裡面.
把dll放在 windows/system/ 下面一樣可以呼叫的到 .使用一個dll就可以share 資料
===========================================================

沒有留言:

張貼留言