亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

移植c到d07的方法有哪些

發布時間:2021-10-13 11:38:39 來源:億速云 閱讀:114 作者:iii 欄目:編程語言

本篇內容主要講解“移植c到d07的方法有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“移植c到d07的方法有哪些”吧!

操作系統用GetProcAddress/dlsym返回空*指針,一種是.

fooPtr = cast(fooPtr)getPtr();//變量,用作類型.

然后這樣:

alias int function() da_fooPtr;
da_fooPtr fooPtr = cast(da_fooPtr)getPtr();

所以,用別名要好點.da_表示d別名.還可以:

int foo() 
{
return 1;
}

void* getPtr()
{
return cast(void*) &foo;
}

void bindFunc(void** func)
{
*func = getPtr();
}

void main()
{
int function() fooPtr;
bindFunc(cast(void**)&fooPtr);
}//將foo**轉為(空**)

第2種,消除了別名.dmd以前未提供棧跟蹤.但dmd在編譯2進制時,不論是共享庫/exe,配置文件都預先配置為導出所有符號.否則,無法實現跟蹤棧.但卻使我的函數指針與導出庫的函數指針沖突了.即使是手動加載的共享庫.因而只好用回別名方式.不會導出別名函數指針/變量.如果你制作動態綁定,一定要注意這點.我仍然用空**來加載函數指針,因為它更簡單.

foo = cast(da_Foo)getSymbol("foo");
//你看不到
//你看到了
foo = bindFunc(cast(void**)&foo, "foo");

手動搞,后者復制粘貼更快.還有一點.給定一個動態綁定函數指針,要遵守d的存儲變量規則.d變量,默認為線程本地的,即每個線程有份變量拷貝.

如果在一個線程加載,而在另一個線程中調用,會崩潰的.

幸好,d的函數指針默認初化為null,解決方式是跨線程共享,用shared/__gshared.d的一個目標就是使并行更容易.通過共享,可以跨線程共用.編譯器會說,這不是線程安全訪問方式,與不變,常一樣,共享也是傳遞性的,你引用一個共享變量,這個引用也是共享的了.用__gshared時,就是全局變量,由程序員負責同步.因此,實現動態綁定時,要決定用線本?共享?全局共享?.

一般用__gshared,因為線程都要訪問.這時,要確保其自身生命期比訪問者更長,因而一般在靜態模塊構造器和析構器中加載/卸載他們.

extern( C )
{
alias void function(int) da_foo;
alias int function() da_bar;
}

__gshared
{
da_foo foo;
da_bar bar;
}

如何加載庫.我在DerelictUtil中實現了抽象了加載庫并取符號.外部我用自由函數來加載.

綁定要付出努力,動態綁定更累,其他人喜歡靜態綁定,但解析c是個難題.我更喜歡動態綁定.

到此,相信大家對“移植c到d07的方法有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

义乌市| 胶南市| 绥滨县| 湛江市| 满城县| 麟游县| 东平县| 依兰县| 广安市| 集贤县| 怀集县| 油尖旺区| 柘城县| 阜康市| 鸡西市| 田林县| 子洲县| 格尔木市| 浦城县| 桂阳县| 灵山县| 白玉县| 镇康县| 定西市| 阿拉善右旗| 房产| 山阴县| 宣武区| 达拉特旗| 乐亭县| 民乐县| 青神县| 灵川县| 哈尔滨市| 新宾| 陕西省| 抚松县| 惠东县| 景宁| 东丰县| 电白县|