NetMessageBufferSendを使いたいと思っています。
NetMessageBufferSend自体の使い方はわかるのですが、使うためにusesなどに
何かを追加しないといけないのでしょうか?
それとも使えないのでしょうか?
環境 winXP + D6Prsonal
APIの名前を検索文字列にして、
Delphi\Source あたりを探してみる・・・というのが一般的な方法ですけど、
これは見つかりませんね・・・。
(Personalでも、主にAPIの定義をしてあるユニットだけは、ソースが公開されているようです)
WinXPの検索はあまりあてにならないようなので、
別の検索ソフトなどを使ってみました。
ただ、検索範囲を狭く取りすぎてしまったので、自分でも探してみてはどうでしょう?
あと、これは正確な話ではないですけど、
C言語のヘッダファイルと同じ名前のものが多いようです。
ヘッダファイルなら、Windowsフォルダなどにあると思うので、それも探してみては?
関数の定義は、
function NetMessageBufferSend(
servername, msgname, fromname: LPCWSTR:
buf: PCHAR;
buflen: DWORD;
): Long; stdcall;
だと思います。
これをinterfaceに用意して、
implementationに、
function NetMessageBufferSend; external 'netapi32.dll' Name 'NetMessageBufferSend';
とすれば使えると思います。
※あくまでも未確認です。この情報が正しいかどうかは、ご自身でご確認ください。
ありがとうございます。
webを検索しても見つからなかったので、ここに質問させていただきました。
にしのさんの内容をやって見ます。
でも、パソコン壊れたようなので、いつ試せるか、、、
午前中は使えてたのに、、、
なぜかパソコンが復旧しましたので、
にしのさんの言われるとおりやってみました。
しかし、'Byte'と'Char'には互換性が・・・のエラーが出ます。
なぜなのでしょうか?
発生する場所は、NetMessageBufferSend(nil,'To','み〜ちゃん',buff,buflen←■ここ■);
ちなみに変数を何も使用せず
NetMessageBufferSend(nil,'To','み〜ちゃん','testmessage',64);
とやってみましたが、メッセージが文字化けしてきちんと表示されませんでした。
そのため、試行錯誤の上、下のようにやったのですが、、、、
解決策を教えてください。
procedure TForm1.Button1Click(Sender: TObject);
var
msg:string;
buff:PBYTE;
buflen:DWORD;
begin
msg:=memo1.Text;
buflen:=length(msg)*2;
getmem(buff, buflen+1);
stringtowidechar(msg, LPWSTR(buff), buflen);
NetMessageBufferSend(nil,'To','み〜ちゃん',buff,buflen);
freemem(buff,buflen+1);
end;
bufはpchar型では、ないですよ。
LPBYTE型です。
ヘルプ見ただけですけど
出来たことは出来たのですが、文字化けします。
WEBを見るとUnicodeがどうこう、らしいのですが
どのように改善すればいいのでしょうか?
procedure TForm1.Button1Click(Sender: TObject);
var
buff:PCHAR;
buflen:DWORD;
begin
buff := 'test message';
buflen:=length(buff)*2;
NetMessageBufferSend(nil,'toadd','み〜ちゃん',buff,buflen);
end;
ツイート | ![]() |