2010-02-18 29 views
0

我在C#中有兩個exe,一個是vC++ exe。這兩個exe都需要訪問一個文件。在c#exe中創建命名互斥並在C++中訪問它一個dll

所以我打算在c#中創建一個命名互斥體。 vC++我怎樣才能訪問這個命名互斥體。任何一個可以給我的範例代碼,這

+0

這可能是一篇很好的文章,以「管理/非託管代碼互操作性概述」開頭,您可以在這裏查看:http://msdn.microsoft.com/en-us/library/ms973872.aspx – Lazarus 2010-02-18 12:54:19

+0

添加樣本:不要讓「命名空間」咬你。我以前在終端服務應用程序中遇到過問題,因爲我沒有想到(也沒有正確閱讀)互斥體名稱可以包含範圍 - 對於我來說,我需要用「Global \ MyMutex」替換「MyMutex」。 – 2010-02-18 14:11:42

+0

@Benjamin:所有(Win2k及更高版本)命名對象現在被限定爲會話或全局。要創建全局命名的對象,需要特定的用戶權限(普通用戶帳戶無法執行此操作)。這就是爲什麼我在回答中避免了整個ACL問題的一部分:-)。 – Richard 2010-02-18 14:54:47

回答

1

事情是這樣的:

HANDLE hMutex = CreateMutex(NULL, FALSE, name); 
if (hMutex == NULL) { 
    // Handle failure. 
} 

如果您需要知道互斥鎖是否已經存在,請檢查hMutex != null && GetLastError() == ERROR_ALREADY_EXISTS

對於兩個進程在同一個會話中的情況,您得到的默認ACL應該是正確的,否則您需要設置適當的ACL。

1

如果您已經創建了C#中的互斥體,你的C++代碼會是這樣的:在C++代碼

HANDLE mutexHandle = OpenMutex(SYNCHRONIZE,0,"NameOfYourMutex"); 
if(mutexHandle == 0) { 
    //handle error 
} 
+0

謝謝謝謝謝謝你!我的錯誤是在C#中創建互斥鎖,然後在C++中調用CreateMutex。在C++中沒有錯誤,它的處理就好像它是一個新的互斥體 - 與來自C#的互斥體無關。但OpenMutex的作品!他們使用相同的互斥體。 – 2016-09-03 00:01:37

相關問題