在C 中,如何實現跟native dll 中途的執行緒間通訊

時間 2021-05-30 11:26:44

1樓:SunnyCase

用 IntPtr 就沒問題了。

C#:[DllImport("Dll1.dll", CallingConvention = CallingConvention.Cdecl)]

static

extern

void

test

(IntPtr

running

,out

UInt64

res);

static

unsafe

void

Main

(string

args

)C++ 部分不變。

2樓:Lex Chou

c#的pinvoke實際上並不是直接的函式指標呼叫,所以你的ref不會持續起作用,CLR會在你呼叫這個帶ref引數的函式的時候臨時在棧上臨時分配個空間存資料,執行完畢後再更新到呼叫者提供的ref變數。所以執行完畢後這個ref就沒意義了。你實際上可以直接提供指標,就可以繞過ref的限制。

3樓:張臻

在C++中提供乙個方法,volatile應該是不work的bool running = False;

bool WillRun(bool run)lock;

running = run;

unlock;

extern "C" __declspec(dllexport) void test(unsigned long long* res)}

4樓:狼大人

volatile 用在多執行緒環境裡基本所有用法都是錯誤的,何況這個過程還經過了 C# -> C++ DLL 的處理。

簡單說,另開乙個 DLLExport 的 API stop(),設定乙個 C++ 裡的全域性 flag(用 atomic 或者加鎖),然後在這個 test 函式裡 check 這個 flag 試試看。

更好的應該是把計算放在其它執行緒 / 程序,避免阻塞請求執行緒。

C 中 const 的實現原理是什麼?

那麼為什麼在用const cast去除掉constness以後,對原const變數寫操作會是未定義行為 因為 C 只規定了編譯器的行為 C 要求編譯器拒絕所有直接修改 const 物件的情況。但是你在經過 const cast 之後會碰到什麼與 C 無關,是編譯器和具體 OS 的事情。是不是有 te...

在 C 裡是怎麼實現 delete 的?

2019 首先寫乙個最簡單的demo include using namespace std class Test Test private int counter static intg counter intTest g counter 0 int main VS2015,release,禁用優...

C 函式模板在 hpp中定義和實現,當有多個檔案包含該標頭檔案時編譯出現重複定義的問題,該如何解決?

任黑 你這情況至少可以肯定不是開源的庫。誰寫的,把ta打一遍。既然不能編譯,那肯定是類外的函式了,因為類內的都是內聯的。採用Single file library的寫法 這裡寫函式宣告 ifdef IMPLEMENTATION 這裡寫函式實現 endif 然後僅在包含該檔案的乙個cpp中,在包含該檔...