2009-11-02 2 views
2

DLL에 공유 데이터 세그먼트를 선언하려고합니다. DLL 공유 데이터 섹션에 오류가 없습니다.

#pragma data_seg(".shared") 
int varx=0; 
#pragma data_seg() 
__declspec(allocate(".shared")) 
// I found this declspec suggestion in another forum 
#pragma comment (linker,"/section:.shared,RWS") 

이 또한 내가 데프 파일에
SECTIONS 
      .shared READ WRITE SHARED 

를 추가 : 나는 함께 지역을 선언합니다. 그러나 나는 항상 :

LINK : warning LNK4039: section '.shared' specified with /SECTION option does not exist 

오류가 발생합니다. 만약 하나의 (.def 또는 pragma comment) 하나만 얻으면 두 가지 모두 에러가 발생합니다.

내가 놓친 것이 있습니까?

답변

3
필자는이 방법으로 사용되는 declspec 볼

:

__declspec(allocate(".shared")) int varx=0; 

내가에만이을 writting 시도 할 것이다 :

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

__declspec(allocate(".shared")) int varx=0; 

은 피하는 빈 부분을 선언하거나 곱하기 정의 하나

+0

argh! 공간을 할당하지 않고 포함 된 변수를 할당하는 것은 현명하지 못했습니다. –

0

로를

data_seg가 obj 파일의 기본 섹션 이름을 변경합니다. 0이 아닌 변수로 초기화됩니다. 따라서 varx = 1로 설정하면이 변수는 .shared 섹션에 나타나며 프로세스간에 공유됩니다. 귀하의 경우 varx = 0 때문에 거기에 나타나지 않았습니다.

대신 #pragma section을 사용하고 변수 선언시 사용할 섹션을 지정하십시오. __declspec (allocate (". shared")) int varx = 0.

당신의 pupose에 대해 data_seg 키워드를 사용하지 마십시오. 이렇게하면 0이 아닌 값으로 초기화 된 다른 변수를 공유 할 수 없습니다.