舊控件以D2009-Compile-StrMove發生E2250錯誤 |
缺席
|
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
原來的Delphi版本都可正常使用,在Delphi2009編譯卻發生錯誤
E2250 There is no overloaded version of 'StrMove' 程式碼為 StrMove(Result.Sysex, Sysex^.lpData, Sysex^.dwBytesRecorded); .. StrMove(MyMidiHdr.SysexPointer, TheSysex, msgLength); 我試過改以 StrMove(MyMidiHdr.SysexPointer, PWideChar(TheSysex), msgLength); 無論是PWideChar或是Pchar,雖可編譯,但程式均無法正常執行,會自動關閉程式。 如有想法,還請不吝賜教,謝謝! |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
===================引 用 sryang 文 章=================== Delphi 2009 的 PChar = PWideChar 所以你應該改成PAnsiChar ==================================================== 感謝回應,其實D2009之前,PChar和PAnsiChar是一樣的,但D2009以後,PChar就變成了PWideChar, 而Sysex^.lpData即為AnsiChar,所以D2009之前使用都沒有問題, 而StrMove所使用之參數是Char,所以才會改成Pchar(Sysex^.lpData), 這樣就可以進行編譯了,只不過執行時會出現Access violation at address...的錯誤! 相關問題已在網路上搜尋許久,都無法解決,再次感謝。 |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
雖然已經儘可能找出問題了,但結果還是令人失望!
strMove(MyMidiHdr.SysexPointer, TheSysex, msgLength); 編譯結果: [DCC Error] MidiOut.pas(478): E2251 Ambiguous overloaded call to 'StrMove' SysUtils.pas(7723): Related method: function StrMove(PAnsiChar; const PAnsiChar; Cardinal): PAnsiChar; SysUtils.pas(7729): Related method: function StrMove(PWideChar; const PWideChar; Cardinal): PWideChar; StrMove(Result.Sysex, Sysex^.lpData, Sysex^.dwBytesRecorded); 編譯結果: [DCC Error] Midiin.pas(575): E2250 There is no overloaded version of 'StrMove' that can be called with these arguments 改成Pchar'或PWideChar或PAnsiChar,即使可以編譯也無法正常執行,會出現Access violation at address.... 謝謝。 |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |