dll 中函式的變數型別是 char,C 呼叫型別化為 cab 包,該資料型別是定義的

發布 科技 2024-04-18
16個回答
  1. 匿名使用者2024-02-07

    當 C 呼叫用 C++ 編寫的 COM DLL 包裝庫時,會出現兩個問題:

    1 資料型別轉換問題。

    2 指標或位址引數傳遞問題。

    首先是資料型別轉換問題。 因為 C 是。 .NET 語言,利用是。 net,所以它實際上是 C++ 資料型別的組合。 。網。

    例如,C++的原始函式是:

    int __stdcall functionname(unsigned char param1, unsigned short param2)

    引數資料型別為 c,必須轉換為相應的資料型別。 如:

    dllimport(“ com dll path/file ”)

    extern static int functionname(byte param1, ushort param2)

    因為呼叫了 stdcall 函式,所以使用了 p invoke 的呼叫方法。 方法 functionname 必須宣告為靜態外部函式,即帶有 extern static 標頭。 我們可以看到,在呼叫過程中,unsigned char 變成了 byte,unsigned short 變成了 ushort。

    轉換後,引數的資料型別保持不變,但必須更改宣告方法。 .NET 語言的規範。

  2. 匿名使用者2024-02-06

    char * 到 C 到字串

    int * 為 refint

    做多到 int

  3. 匿名使用者2024-02-05

    你只需呼叫,嘿,無論原始資料型別是什麼,你都可以傳遞它,然後會出錯。

  4. 匿名使用者2024-02-04

    函式的原型定義是 char,所以你當然會繼續使用 char。

  5. 匿名使用者2024-02-03

    使用 system::string 就可以了,因為您已經指定了 charset = 並且 clr 可以自動將 ASCI 字串轉換為 Unicode 字串 (.)。net 字串)。

  6. 匿名使用者2024-02-02

    與字串。 char* 表示字元型別的記憶體位址。 此字串不應更改函式中的任何內容。

    Stringbudiler 通常用於更改字串。

  7. 匿名使用者2024-02-01

    &符號是C++中的引用型別,類似於C中的ref,以及Dellphi中的var關鍵字作為引數

    切換到德爾福:

    function nvs_login(var lloginid:dword; const sznvsip:pchar; const szuser :

    pchar; const szpwd : pchar) :boolean;

  8. 匿名使用者2024-01-31

    我感覺是直線的,對吧? 或者 string[0] ......

    由於 c 中的變數都是指標,因此字串實際上應該在 c++ 中。

    string*……

  9. 匿名使用者2024-01-30

    不能直接使用,可以將函式引數傳遞給對應的函式,否則在被呼叫的函式中將不可見。 請參考它。

  10. 匿名使用者2024-01-29

    不能定義為全域性變數。

  11. 匿名使用者2024-01-28

    byref fingerbuf as string

    此外,fingerbuf 引數需要快取在肢體區域,不得小於 256 304 位元組。

  12. 匿名使用者2024-01-27

    類沒辦法,結構體沒問題。

    事實上,對於 DLL,類的匯出一直是乙個問題。 由於專案的需要,我之前已經了解了一點,但我最終放棄了。

    然後我想到了乙個辦法。

    類的例項通過指標傳遞出去,然後在類的基礎上封裝一層,每個公共函式都用乙個函式封印,建立的類的指標直接傳遞到參數列中,在dll內部調整對應的方法。

    房東不妨也試試。

    例如,g() 函式返回乙個 intptr。 這個指標是在dll中建立物件的指標,但在C語言中並沒有具體劃分為張三或王二。

    將 add 函式的全域性匯出函式 add2(void*) 新增到呼叫 a 的 dll 中,然後將指標轉換為 add2 的函式,然後調整其 add 方法。

    這有點像在敵後繞道而行。

    此外,由於需要用 C 語言呼叫 DLL,因此只要新增執行時支援,DLL也可以編寫為託管。 將部分新增到該類宣告中,然後直接新增引用以像 C 中的 dll 一樣使用它有多方便? 我還嘗試了乙個映象驅動的,它被密封為託管的 dll,它同樣易於使用。

    房東也可以考慮一下。

  13. 匿名使用者2024-01-26

    房東:你是怎麼解決這個問題的?

    我也遇到了同樣的問題,char**p 指向指標陣列。 在dll中遵循是可以的,但是當呼叫c時,它會提示非法記憶體或其他東西。

  14. 匿名使用者2024-01-25

    如果 dll 檔案是託管的,則可以通過將其直接附加到 bin 來直接在程式中呼叫它,如果它是非託管類,則只能使用它。

    使用 dllimportattribute 標記公共靜態外部方法,例如。

    dllimport("你的 dll 的名稱")]public static extern void test(intptr s1,intptr s2);

  15. 匿名使用者2024-01-24

    傳遞乙個二維陣列 (char[,]) 或直接在 unsafe 塊中使用指標。

    您也可以嘗試交錯陣列 (char),我也沒有嘗試過。

  16. 匿名使用者2024-01-23

    應該可以直接使用字串!

相關回答
8個回答2024-04-18

開啟 SPSS 後,單擊下面的 Variable View 選項卡。 在變數檢視的“名稱”選項卡下,雙擊單元格以在操作行中輸入文字。 輸入後按回車鍵,將自動生成以下引數。 >>>More

15個回答2024-04-18

直接通過“bolean bl = true; 以定義值為 true 的 Boer 型別。 >>>More

9個回答2024-04-18

我們可以從以下幾個方面來理解f(x)。

第一:對代數公式的理解。 每個代數公式本質上都是乙個函式。 >>>More

8個回答2024-04-18

變數分為自變數、因變數和不相關變數。

一般來說,在生物學研究中,有乙個人為控制的量可以調整或改變,即自變數,由於自變數的變化而變化的量是因變數,其他變化因素是無關變數。 >>>More

9個回答2024-04-18

根據定義,有 (sinx)。'=lim[sin(x+ x)-sinx] ( x),其中 x 0,將 sin(x+ x)-sinx,即 sinxcos x+cosxsin x-sinx,由於 x 0,所以 cos x 1,因此 sinxcos x+cosxsin x-sinx cosxsin x,則 (sinx)'=lim(cosxsin x) x,這裡必須使用乙個重要的極限,當 x 0 時,lim( sin x) x=1,則 (sinx)'=cosx。 >>>More