掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DELLに実行ファイルからテキストを送るには (ID:39460)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
torさんありがとうございます、無事解決しました。 ソースがこんがらがったのでサンプルを直接いじって色々試行錯誤してました^^;。 ShareMemは・・・、忘れてました^^; でもShareMemを先頭に追加しても、こちらではエラーなりました。 「無効なポインタ操作」となります。 環境は、Vista、Delphi7Pro、です。 Pcherで受け渡しする方法で無事解決しました。 改めてありがとうございますm(__)m。 以下がソースです。 DLLソース: library DllForm; { DLL メモリ マネージャ について: もしこの DLL が引数や返り値として String 型を使う関数や手続きを エクスポートする場合、以下の USES 節とこの DLL を使うプロジェクト ソースの USES 節の両方に、最初に現れるユニットとして ShareMem を指定しなけれ ばなりません。 これは構造体やクラスに埋め込まれている場合も含め String 型を DLL とやり取りする場合に必ず必要となります。 ShareMem は共用メモリマネージャである DELPHIMM.DLL とのインターフェース です。あなたの DLL と一緒に配布する必要があります。 DELPHIMM.DLL を使うのを避けるには、PChar または ShortString 型を 使って文字列のやり取りをおこなってください。} uses //ShareMem, SysUtils, Classes, Dialogs, DLLMAIN in 'DLLMAIN.PAS' {SubForm}; exports // エクスポート関数の定義 ShowForm index 1, // ShowModalメソッドでの表示 speak index 2; begin end. DLLフォーム部: unit DllMain; interface uses {ShareMem, }Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, HTTSLib_TLB, ExtCtrls; type TSubForm = class(TForm) Button1: TButton; TextToSpeech1: TTextToSpeech; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private public { Public 宣言 } end; procedure ShowForm; export; stdcall; // モード付きフォームの表示 function speak (s:string): string; stdcall; var SubForm: TSubForm; s1:string; implementation {$R *.DFM} { フォームの表示処理 } procedure ShowForm; begin try Application.CreateForm(TSubForm, SubForm); // フォームの作成 SubForm.ShowModal; // モード付き表示 finally SubForm.Free; // メモリなどの解放 end; end; function speak (s:string): string; stdcall; begin s1 := PChar(s); end; procedure TSubForm.Timer1Timer(Sender: TObject); begin TextToSpeech1.Speak(s1); timer1.Enabled := false; end; procedure TSubForm.Button1Click(Sender: TObject); begin TextToSpeech1.Free; close; end; end. DLL呼び出し側プロジェクトファイル unit DllInt; interface procedure ShowForm; stdcall; function speak (s:string): string; stdcall; implementation const DllForm = 'DllForm.Dll'; procedure ShowForm; external DllForm index 1; function speak (s:string): string; external DllForm index 2; end. DLL呼び出し側フォームソースファイル unit Main; interface uses {ShareMem, }Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DllInt; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin speak(PChar(edit1.Text)); ShowForm; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.