第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

C# Pinvoke 字符串

C# Pinvoke 字符串

C#
牧羊人nacy 2022-10-23 13:24:30
我正在嘗試使用 PInvoke 綁定此 C 函數(shù)。bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode);這是 PInvoke 簽名。[DllImport(nativeLibName,CallingConvention = CallingConvention.Cdecl)]public static extern bool GuiTextBox(Rectangle bounds,                                       string text,                                       int textSize,                                       bool freeEdit);當(dāng)我嘗試使用它時(shí),字符串不會(huì)被修改。我嘗試將它作為 ref 傳遞,但是當(dāng)我嘗試使用它時(shí)它會(huì)因嘗試讀取或?qū)懭胧鼙Wo(hù)的內(nèi)存而崩潰。
查看完整描述

1 回答

?
臨摹微笑

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊

我希望它應(yīng)該是這樣的:


// private : do not expose inner details; 

// we have to manipulate with StringBuilder

[DllImport(nativeLibName,

           CallingConvention = CallingConvention.Cdecl,

           EntryPoint = "GuiTextBox",

           CharSet = CharSet.Unicode)] //TODO: Provide the right encoding here

private static extern bool CoreGuiTextBox(Rectangle bounds, 

                                          StringBuilder text, // We allow editing it

                                          int textSize, 

                                          bool freeEdit);


// Here (in the public method) we hide some low level details

// memory allocation, string manipulations etc.

public static bool CoreGuiTextBox(Rectangle bounds, 

                                  ref string text, 

                                  int textSize, 

                                  bool freeEdit) {

  if (null == text)

    return false; // or throw exception; or assign "" to text


  StringBuilder sb = new StringBuilder(text);  


  // If we allow editing we should allocate enough size (Length) within StringBuilder

  if (textSize > sb.Length)

    sb.Length = textSize;


  bool result = CoreGuiTextBox(bounds, sb, sb.Length, freeEdit);   


  // Back to string (StringBuilder can have been edited)

  // You may want to add some logic here; e.g. trim trailing '\0'  

  text = sb.ToString();


  return result;

}


查看完整回答
反對(duì) 回復(fù) 2022-10-23
  • 1 回答
  • 0 關(guān)注
  • 117 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)