はじめまして、こんばんは。
DLLの使い方について教えて頂けないでしょうか。
こちらにあるDLLを使いたいと思っています。
http://hp.vector.co.jp/authors/VA026873/AcadRemocon.dll
それで、VBScriptからですと下記のように使えるようです
http://www.acadremocon.net/acadremocon/help/Version.htm
このように、VBscriptから使えるDLLをDelphiで使うには、
どのようにしたた良いのでしょうか?
DelphiでのDLLの使い方を調べて下記のようにしてみましたが、
[プロシージャエントリポイントVersionがダイナミックリンクライブラリ〜から見つかりませんでした]と表示される状況です。
どなたかよろしくお願いいたします。
uses
〜中略〜
implementation
{$R *.dfm}
function Version():string; stdcall; external 'AcadRemocon.dll';
procedure TForm1.FormCreate(Sender: TObject);
begin
Showmessage(Version());
end;
end.
環境:Delphi2010
こんにちは.
DLL には,システムに登録しなければ利用できないもの.
パスの通った場所,つまりフォルダにあれば利用できるものなどがあります.
また,中には,タイプライブラリの取り込み等で,
内部の関数類を Delphi のコードにできることもあります.
その DLL はどうなっているのてしょう.
それと,Delphi のバージョンと Windows のバージョンはなんでしょう.
64 bit のWindows では,動作しないものがあります.これは内部の変数の種類によります.
これも DLL の説明にあるかも知れませんね.
レスする人が調べろ,っていうのはなしにしましょうね.
まず,使う人が「モノ」の正体をしらないと,最近あった事件のようなことに
なるかもしれませんよ〜(笑)
ん ? もしかしたら,私が知らないだけて有名な DLL だったらゴメンなさい.
「無知は最大の武器」ですから.
CreateObject のやつは ActiveX だろ
http://www.acadremocon.net/acadremocon/Readme.txt
にも ActiveX と書いてあるぞ
登録して取り込め
Mr.XRAYさん
こんばんは、ありがとうございます。
随分と情報不足でした、すみません。
◆DLLに関する情報
・regsvr32.exeを使って自分で登録するタイプです。
・VBScriptでは下記のコードで動かせるようです。
Call Main
Sub Main()
Set Acad=CreateObject("AcadRemocon.Body")
If Not Acad.CheckVersion("110") Then Exit Sub
End Sub
出典http://www.acadremocon.net/acadremocon/help/CheckVersion.htm
・使えるコマンド一覧
http://www.acadremocon.net/acadremocon/help/commands.htm
◆環境について
開発環境はDelphi2010 Windows7 64bitですが、
当DLLが32bit時代からあるものなので、
コンパイルしたものの動作確認をXp(32bit)で行っています。
さて、上記のコマンド一覧の中の詳細を色々見ていて、
VBScriptでは「CreateObject」とやっているので、Delphiでも同様な事が必要かと
思うのですが、ではどういう種類の変数にして宣言すべきなのかが、
見つけられない状況です。
何かちょっとしたとっかかりでも見つかれば良いのですが…
また御時間あるときにでもアドバイス頂けると助かります。
どうぞよろしくお願いいたします。
KHE00221さん
ありがとうございます。
ActiveX、調べてみます。
ActiveX DLL Delphi 辺りで調べて、ようやく使えるようになりました。
ありがとうございました。
当初、Win7(64)でコンパイルしXP(32)で動作確認をしてたのですが、
コマンド実行しても全く返答なく悩んでおりました。
試しにXP(32)でコンパイルしたところ動いてくれました。
XP(32)でコンパイルしたものはWin7(64)でも動いてくれました。
まだまだ分かってないことが多すぎですが、
とても楽しいです。
Mr.XRAYさん、KHE00221さん
この度は助かりました、ありがとうございました。
解決です。
こんちには,
>また御時間あるときにでもアドバイス頂けると助かります。
>どうぞよろしくお願いいたします。
お願いされたのでアドバイスします(笑)
ここはサポートセンターではありません.
お互いに助け合う場所です.
解決したら,後でこの掲示板を利用する方のためにもサマリーを書きましょう.
また,質問の時は,環境を書きましょう.
これも重要な情報です.環境によっては,コンパイル時,あるいは実行時に期待する
動作をしない場合があります.
これはウソではありません.本当です.だから環境が重要なのです.
訊かれてから書く,情報,状況の「後出し」はいけませんねぇ.
質問された方が書いてないので代わりにやってみました.
確認環境は,Windows XP(SP3) + Delphi XE です.
(1) 提示リンクから AcadRemocon.dll をダウンロード
(2) パスの通ったフォルダに置く
(3) [ファイル名を指定して実行]ダイアログから regsvr32 D:\XRAY\AcadRemocon.dll を実行
パス名は私の場合
(4) Delphi XE の IDE を起動
(5) メニューの[コンポーネント] [コンポーネントのインポート]から [タイプライブラリの取り込み]
(6) ACad Remote Controller を選択して [次へ]
ACad Remote Controller がなければ[追加] で DLL を選択
---- 中略 ----
(7) 既存のパッケージに追加
参考記事
http://mrxray.on.coocan.jp/Delphi/CompoInstall/TypeLibraryD2009.htm
作業が終了したら,IDE を閉じて,再度起動
コンポーネントはレットの [Active] パレットから TBody をフォームへ配置
TButton を1つ配置
この TButton のクリックイベントを以下のようにする
procedure TForm1.Button1Click(Sender: TObject);
var
DllVer : OleVariant;
begin
ShowMessage(Body1.Version);
DllVer := 100;
if Body1.CheckVersion(DllVer) then begin
ShowMessage('True');
end else begin
ShowMessage('False');
end;
end;
私の場合,320 と True が表示されました.
クラス名が単純すぎますね. TACadBody にでもしてくれたらよかったのに...
また,64bit 版の Windows 7 で 32bit 版の DLL をシステムに登録する際,
コマンドラインで,regsvr32 を実行すると,64bit 版の regsvr32 が実行されてしまいます.
32bit 版の regsvr32 は,SysWoW64 にあります.これを実行します.
Mr.XRAY さん、こんにちは。
検索てすぐに見つかってしまったために、
書くまでも無いかと勝手に判断してしまいましたが仰るとおり、
情報として残すべきでした。大変申し訳ありません。
私の場合は結局、
メニューの[コンポーネント] [コンポーネントのインポート]から
「ActiveX コントロールの取り込み」に進んでしまい、
一覧に表示されないために、その方法は諦めていました(^^;)
それで下記のようにして実行しました。
//Uses にComObj追加
{$R *.dfm}
function Version():integer; stdcall;
external 'AcadRemocon.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
objAcad : variant;
begin
objAcad := CreateOleObject('AcadRemocon.Body');
Showmessage(objAcad.Version);
end;
DLLの追加の仕方を教わったおかげで、
今後は先駆者の方々の無数のDLLを色々使うことが出来そうです。
助かりました。ありがとうございました。
全く何も情報のないレスになって申し訳ないので、せめて(と言っても私がわかるレベルの話ですが)
具体的な「64bit 版の Windows 7 で 32bit 版の DLL をシステムに登録する手順」だけでも残しておきます。
・AcadRemocon.dll を%WINDIR%\SysWOW64\下に配置
・コマンドプロンプトで、
%WINDIR%\SysWOW64\regsvr32.exe %WINDIR%\SysWOW64\AcadRemocon.dll を実行
この度はありがとうございました。
ツイート | ![]() |