2014-10-16 98 views
1

我有鑄造字符串到AnsiChars問題,功能看起來像PAnsiChar,無效類型轉換

function PI_CST(ID: LongInt; 
      const szAxes: PAnsiChar; 
      const szNames: PAnsiChar): Bool cdecl ; 

我想以這種方式來使用這個funcion:

bOk:=PI_CST(g_iD,'1',PAnsiChar(ComboBox1.Text)); 

,但它不工作,當我打電話功能這樣:bOk:=PI_CST(g_iD,'1','M-511.DD1')它的偉大工程(價值beetween報價爲常數),有沒有辦法在這個函數的參數從組合框選擇去使用?

+2

我猜你有Unicode的德爾福(2009以上),因此'Text'屬性是Unicode字符串類型。如果是這樣,使用'PAnsiChar(AnsiString(ComboBox1.Text))'。 – TLama 2014-10-16 14:11:33

+0

@ meller92每當你詢問可能與Unicode相關的問題時,你應該在你的標籤中包含Delphi版本。假設你使用XE7那麼標籤爲這個問題應該是'德爾福德爾福xe7' – 2014-10-16 14:13:15

回答

2
PAnsiChar(ComboBox1.Text) 

這告訴編譯器來解釋的Text屬性返回,就好像是一個指向8個ANSI字符的字符串。如果該字符串是一個Unicode字符串,則該轉換無效,因爲基礎緩衝區是用16位文本編碼的。

您需要鑄造之前將字符串轉換爲ANSI:

PAnsiChar(AnsiString(ComboBox1.Text)) 
+0

所以,如果我想從ANSIChar類型數組轉換到PWideChar首先我必須施放此數組AnsiString類型嗎? – meller92 2014-10-16 14:26:38

+0

號如果你想'PWideChar'那麼你就寫'PChar類型(ComboBox1.Text)'或'PWideChar(ComboBox1.Text)'如果你喜歡。我更喜歡前者,因爲'PChar'總是匹配'string'。 – 2014-10-16 14:34:58

+1

我想是這樣的:'Application.MessageBox(PWideChar(AnsiString類型(河豚)), '錯誤',0);'其中河豚是AnsiChars – meller92 2014-10-16 14:38:56

相關問題