締切済み DelphiでVB用のDLLを使えないでしょうか? 2001/03/29 22:25 初心者で全然分からないので教えて欲しいのですが、色々出回っているようなVB用のDLLをDelphiで使用する方法はないのでしょうか?宜しくお願いします。 みんなの回答 (2) 専門家の回答 みんなの回答 honiyon ベストアンサー率37% (331/872) 2001/06/15 12:13 回答No.2 こんにちは、honiyonです。 大分前に質問されてますがもう解決されているのかな?(^^; 何となく見つけてしまったので回答してみたりします。 Delphi風に宣言するなら、以下のようになります。 function MessageBox(HWnd: Integer; Text, Caption: PChar; Flags: Integer): Integer; stdcall; external 'user32.dll' name 'MessageBoxA'; これは、Windowsの MessageBox関数(API)を読み込んだ例です。 MessaeBox関数の宣言をして、 external [ロード元のDLL] name [ロード元の関数名]; です。 stdcall; は呼びだし規約指定です。 大抵(というか標準)では stdcall;です。 この方法を用いて宣言すると、実行時にDLLが自動的にロードされます。 もし必要なタイミングで読み込みたい場合は、LodLibraryや、GetProcAddressを使って下さい。 使い方はWin32APIと一緒なので、詳しくはWin32APIのヘルプを参照してください。 以上が DLLのロード方法です。 基本的に開発言語が何であろうが「DLL」という規則に沿ったものならロード可能です。 ただし、その言語に依存する形式の変数などを使われると厄介です。 たとえば、Delphiでいうとstring型ですね。 これは Delphi固有の変数です。 他の言語からでもロード出来るようにしたければ PCHAR型を使う事になります。 その VBで作った DLLが、VB固有の変数型を使用していなければ、この方法ですんなりロードして使えると思います。 参考になれば幸いです(.. 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 selenity ベストアンサー率41% (324/772) 2001/03/30 14:34 回答No.1 私はDelphi使いではないので試したことは ありませんが、「About Delphi」のサイトで Delphi-MLの過去ログを検索してみては 如何でしょうか? 参考URL: http://www2.big.or.jp/~osamu/Delphi/ 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発その他(プログラミング・開発) 関連するQ&A Delphiでyacscom.dllを使いたい Delphi6を使用してType Libより、Yahoo! Audio Conferencing(yacscom.dll)を使用してみようと思ったのですが、エラーになってしまいます。 タイプライブラリからのYACSCOMLib_TLB.pas書き出しはメニューから実行し完了します。それをパッケージに登録も問題はありません。 新規アプリを開き、追加したコンポーネントTYAcsをフォームに置こうとすると「インターフェイスがサポートされていません.」と表示されてしまいます。 同じコンポーネントをVB6で使おうとした場合は、フォームに貼り付けでき使えそうです。 ちなみに、Delphi2010でも確認しましたが、同じ結果です。 yacscom.dllは、ヤフーメッセンジャーV7インストール時に導入されるものを対象で考えています。 Delphiで使えるようにできる方法があれば知りたいと思い、ここに書き込みさせていただきました。判られる方が居られましたら、よろしくお願いします。 Delphi6でVB.NETで作成のDLL呼出 VisualSutudio2005で作成され提供されているDLLをDelphi6から呼びだしたいと思っています。 提供ファイルとしてあるのは以下のものです。 ・DLLファイル本体 ・XMLファイル 直接は呼びだせない(?)と思ったので、 VB.NETでDLLを作って間に入れて、 下のように呼び出せばいいのかなと考えています。 Delphi6で作成のEXE → VB.NETで作成のDLL(COM登録?) → 対象のDLL まずはDelphi6のEXE→VB.NETのDLLの部分を作って試してみたですが Delphi6のEXEの起動時にエラーとなってしまいます。 「アプリケーションの初期化に失敗しました」 ネットなどで調べてみて作り方は下記のようにしました。 <呼ばれる側:VB.NETのDLL> 1.COMクラスを作る。 ・COM参照可能の設定にした。 (タイプライブラリが作成され、レジストリへのCOM登録は自動でされる?) 2.作成したDLLはCドライブ直下に置いた。 ※下の*****は自動作成された固定値が入っています。 また見やすくするためここでは半角空白を全角空白に変えています。 -------------------------------------------------------------------- Imports System.Windows.Forms <ComClass(Middle_Dll.ClassId, Middle_Dll.InterfaceId, Middle_Dll.EventsId)> _ Public Class Middle_Dll #Region "COM GUID" ' これらの GUID は、このクラスおよびその COM インターフェイスの COM ID を ' 指定します。この値を変更すると、 ' 既存のクライアントはクラスにアクセスできなくなります。 Public Const ClassId As String = "**************************" Public Const InterfaceId As String = "**************************" Public Const EventsId As String = "**************************" #End Region ' 作成可能な COM クラスにはパラメータなしの Public Sub New() を指定しなければ ' なりません。これを行わないと、クラスは COM レジストリに登録されず、 ' CreateObject 経由で ' 作成できません。 Public Sub New() MyBase.New() End Sub Public Sub DispMsg() Dim MsgRet As MsgBoxResult MsgRet = MessageBox.Show("VB.NET DLLより表示!", "確認メッセージ", MessageBoxButtons.YesNo, MessageBoxIcon.Information) End Sub End Class --------------------------------------------------------------------- <呼び出し側:Delphi6のEXE> 1.タイプライブラリの取り込み設定で登録したDLLを選択し、 「コンポーネントラッパーの作成」にチェックを入れてインストールを実行。 --------------------------------------------------------------------- unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,OleCtnrs,ComObj, OleServer; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; //---------- //静的呼出 //---------- procedure DispMsg();Stdcall; external 'c:\Middle_Dll.dll' name 'DispMsg'; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin //---------- //静的呼出 //---------- DispMsg(); end; end. ----------------------------------------------------------------- Delphi6のEXEはすでにあるものなので、 呼び出し元はDelphi6から変えられませんが、 呼び出し先はC#やC++でも構いません。 (1)Delphi6のEXE→VB.NETのDLLの呼び出しは可能でしょうか? (2)可能でしたら不具合と思われる箇所はどこでしょうか? (3)この方法より良いと思われる方法はありますでしょうか? DLLを作った事がないので見よう見まねで作っています。 気になる点やアドバイス程度でも構いませんので、 どうかよろしくお願いいたします。 == 開発環境 == WindowsXP SP3 Delphi6 Enterprise SP2 VisualSutudio2005 ProffesionalEdition 評価版 .NET Framework 1.1~3.5 VB2008でのDLL作成方法について はじめまして、はじめて投稿します。 初心者なので変な質問をしていたらすいません。VB2008を使用しています。 VBで作成したDLLファイルをLabviewで使用したいと思っています。 ただVB6.0でActiveX DLLを作成する方法はわかるのですが、VB2008で作成する方法がわかりません。 クラスライブラリでプログラムを作成し、DLLにすることはできるのです・ しかしレジストリに登録しようと思い「regsvr32 ファイルのパス**.dll」と入力したところ「**.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つかりませんでした」と出ます。 調べてもVB2008でのActiveX DLL作成方法が見つからなくて困っています!!! わかるかた、よろしくお願いいたします。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム Delphiの環境について Delphi初心者です。 現行VBVersion5で構築したシステムが動作するPC上にDelphi (バージョンは未だ決まってません) でシステムを構築しようと考えていますが、この2つのシステムの 共存は可能なのでしょうか? (VB同士でバージョンが異なるとDLLとかの問題がありますが、Delphiでは それと似たような制限とか問題はあるのでしょうか?) なに分初心者なので、おかしな質問かも知れませんが、よろしくお願い します。 DLL作成について Delphi6とVisualstdio.Net2003を持っています。Excelから使用するDLLを作成したいのですがどちらがいいか迷っています。(ソフト作成は久しぶりです).NetがかつてのVBのようにランタイムが必要ならばDelphiの方がいいかなと思っています。.NetでDLLを作成した場合ランタイム等は必要なのでしょうか?(Windows98の場合も含め)よろしくお願いいたします。 DelphiのDLLのサイズについて DelphiプログラムをDLL化しています。 元のプログラムのサイズが10Mですが、このプログラムの一部(行数にして全体の1/7ほど)をDLL化すると、4Mにもなります。 こんなものでしょうか? VB.NETがDelphiより有利な点は VB.NETとDelphiを比較して互いに有利不利な点を教えてください。 また、VB.NetはDelphiより速いですか? C++ のDLLがdelphiで読めない VisualStudio2010C++で作ったDLLをdelphiで利用したいのですが、「エントリポイントが 見つかりません」といわれてしまいます。チュートリアルのサンプルそのままで試して見ましたが、VS2010 付属のdumpbin .exe でdllの中身を見るとエントリポイントが @ILT+345?Add@MyMathFuncs@MathFuncs@@QAGNNN@Z)みたいな、元の関数名はどうした? と思えるような名前です。 defファイルを使って見ましたが、今度は 1 0 0001115E Add = @ILT+345(?Add@MyMathFuncs@MathFuncs@@QAGNNN@Z) みたいな表示でやはりdelphiから読めません。__stdcall にはしています。 VC++で読み込めばちゃんと読めるのである意味正しく作られているのだと思いますが、他のOpenNI , OpenGL などのdllをdumpbin /exports で覗くと、整然と関数名が並び、 これなら読めるだろうと思えますし、実際にdelphiでも使えます。 他の言語ですっきり関数名で呼び出せる(普通の)DLLを作るにはどうすれば良いのでしょうか。 VisualStudioで作ったDLLは呼ぶ側があの記号のような名前で呼べということなのでしょうか? C#で作成したDLLをDelphiで呼ぶ方法 プログラミング初心者です。 以下の内容について、どなたか教えてください。 Visual studio 2010(C#のフォームアプリケーション)とCOM(ActiveX Tool bar)で作成されたフォームをDelphiで呼び出すことは可能でしょうか。 上記の内容を試験的に作成し(Visual studio 2010C#のフォームにCOMから参照したToolbarを貼り付けた物)、プロジェクトの出力方式をクラスライブラリに変更して、DLLの作成までは行えました。しかし、その先のDelphiからの呼び出し方がわかりません。 上記のDLLを用いてDelphiから呼び出す方法をご存知の方がいれば、教えてください。 なお現在の開発環境は以下の通りです。 Visual Studio 2010(C#) Delphi XE2(Trial) ご教授のほど、よろしくお願い致します。 Delphi6 DLL内でのメモリ共有(?) こんにちは、honiyonです。 複数アプリケーションからそれぞれコールバック関数を登録してもらい、状況に応じてそれぞれのコールバック関数を呼び出す、というDLLを作成しています。 しかし現在、呼び出しアプリケーションごとにメモリ空間が独立してしまい、コールバック情報を同一空間内で管理出来ずに困っています。 旧VerのDelphiで16bit DLLなら、interface部に定義した変数、オブジェクトはDLL内で同一空間内で共有出来るようですが、これをDelphi6 32bitDLLで行う事は不可能でしょうか? もしくは、その他の方法で独立メモリ空間を作らないようにする方法はありますでしょうか? 不可能な場合、CreateFileMappingが次に有効な手段として候補に挙がると思います。CreateFileMappingで管理クラスのポインタを渡してクラス共有というのは現実的な手法でしょうか? よろしくお願いいます(.. VB2005で作成したDLLの呼び出し方 はじめまして、VB2005(.NET)初心者です。 現在、各プログラムを実行するためのメニュー プログラムを作成しています。 .net以前では、各プログラムをEXEで作成し API関数を利用し、メニューより実行させて いましたが、今回、各プログラムをEXEではなく dllで作成し実行する方法で作ることになりました。 各プログラムのdllを実行する方法がわかりません。 参考書等みてみましたが、見当たりません。 どのようにしていらっしゃるか教えて下さい。 宜しくお願いいたします。 Delphi Delphi 2010についてお問い合わせ致します。 VB 2008用のSDKがあります。 販売元に問い合わせしたところ Delphiに対応するかわからないという回答でした。 試してみたいのですが、SDKをインストールしたことがなく、 インストール方法がわかりません。 どのたか、おわかりのかたいらっしゃいましたら、 ご教授お願いいたします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム DelphiとVBの開発コスト あるシステム開発をベンダ-に出したところ VBでの提案があったのを蹴って、Delphiでの 開発を行うように現在交渉中です。 ベンダ-がDelphiでの開発はコストがかかる と難色を示してますが、果たして本当のところ そうなのでしょうか? コンパイル、デバック作業にコストが大と 言われてますが、逆にVBでありがちなプログラム 実行後の結果をみて構文の誤りの発見されるとい うのが、少ないと思うのですが・・ OS環境の影響を受けず、インタプリタよりはるかに 実行速度が速いDelphiで行うのがベストのシステム なのですが(広く配布するプログラムでクライアン トの環境を把握出来ない) **(実はこのベンダ-VBでの開発経験は 豊富ですが、Delphiでの開発はないらしいです。) DLLの登録をVBで行いたい(VB2005) いつもお世話になっております。 VB2005で開発しています。 DLLを登録するときに、コマンドプロンプトから regsrv32 ファイル名.dll と実行すると思います。 これをVBから行いたいのですが、何か良い方法はございませんか? 具体的には、VBでレジストリ登録するファイルの一覧を出力して、 それをレジストリ登録したいのです。 VBとバッチを組み合わせれば、実現可能なのですが、 ファイルを2つに分けたくないので、VBだけで処理できないものかと 思いました。 コマンドプロンプトで実行するコマンドをVBから同じように実行できれば良いのですが・・・ もしよろしければ、ご教示ください。 よろしくお願い致します。 VB2005 から DLL を呼び出す VB 初心者です。 今、VB の練習ということで VB 2005 Express Edition を使って、個人用ブラウザをつくっています。Web ページの表示は Webbrowser コンポーネントを使っています。 その仕様で、閲覧先によって HTTP Proxy を変更するようになっています。(自分で決めたんですが) いろいろ調べてみると、urlmon.dll の UrlMkSetSessionOption() を呼べば自分のアプリケーション限定で Proxy を変更できるようだ、ということがわかりました。 古い VB など(VB 6 とか?)では、 Private Declare Sub UrlMkSetSessionOption Lib "urlmon.dll" _ (ByVal dwOption As Long, ByVal pBuffer As Any, _ ByVal dwBufferLength As Long, _ ByVal dwReserved As Long) このような感じで宣言するとかあったんですが、VB2005 では Any がダメだとか、 Type INTERNET_PROXY_INFO Dim dwAccessType As Long Dim lpszProxy As String Dim lpszProxyBypass As String End Type で Type はダメだとか、呼び出し側で、LenB を使おうとしたら使えないだとか、INTERNET_OPTION_PROXY の値がわからないなど、問題が山積みです。 上記 DLL を VB 2005 で使ったことがある人がいたら(またはわかる人)、使い方を教えてもらえないでしょうか? DLLで格納された値をVBに渡す方法 <VC++で作成したDLLをVBで呼ぶ処理> VBから変数をDLLに渡して値を格納してVBで受け取りたいのですが、 文字列が格納されている先頭アドレスをVBに渡したい場合の 方法を具体的に教えてください。 構造体を使用する方法はできたのですが、使わない方法(引数が変数)を 教えてください。 よろしくお願いします。 VB6 - DLLの動的リンクの方法について 統合アーカイバプロジェクトのdllを使用した解凍ツールを作ろうと思っているのですが、dllを遅延バインディングする方法はあるのでしょうか? 現在は全てのdllの、全ての関数に対してDeclare節を使用しているのですが、これでは統合アーカイバプロジェクトの仕様を全く役立てられていないということになります。 ○Library系のAPIで得られる関数へのポインタはVBで利用することは原則的に不可能 ○rundllは返り値を取れないため不適切 ○VB.netでは遅延バインディングを行うことができる という程度のことは調べることができましたが、VB6での遅延バインディングを実現する方法については見つけることができませんでした。 どなたかご存知の方よろしくご教授願います。 "VB6.0 DLL" は "VB4.0" 含む? お世話になります。XP→7 に買換え、サクサク動くのでフリーのゲームをダウンロードして楽しんでる者です。ところで、あるお目当てのソフトに 「VB4.0のランタイムDLLが必要です。別途用意してください。」 なる注意点が記されていました。ネット検索すると "VB6.0 ランタイムDLL" が多数ヒットします。 Q1: 6.0 には 4.0 が含まれているのでしょうか? あくまでも 4.0 を入れないといけないんですか? Q2: お勧めのダウンロードサイトがあれば、教えてください。 VC++のDLLファイルをVBで読み出せません。 お世話になります。 プログラムをやり始めて3か月の初心者です。仕事で以下のような事をしていますが、うまくいかず悩んでいます。 プログラム(1):VB 2008年版 メインプログラム プログラム(2):C言語 2006年版 プログラム(3):VC++ VISUAL STUDIO2012 EXPRESSを使用 ■今のプログラム (2)のdllファイルを(1)で呼び出しています。問題なく動きます。 ■やりたい事 (2)のプログラム内容を変更したのが(3)です。そのdllファイルを(1)で呼び出したいです。 ⇒しかし、(3)のdllファイルを読み込むことができません。((3)のdllファイルは作れました。) (3)はVC単独では正しく動作します。 (1)のプログラムに、(2)を呼び出すときと同じように(3)用のプログラムを追加しました。作った(3)のdllファイルは指定したフォルダにきちんと入れています。 コンピューターに詳しい先輩が時間をかけてみてくれたのですが、結局わからずじまいでした。 ■質問 VBの型が古い、EXPRESSを使っているからできないのでしょうか? VCでdllを作って、VBで呼び出すまでの流れをわかりやすく紹介した書籍やWEBなどあればご教示頂けませんでしょうか? よろしくお願いいたします。 VB2008でDLLの取込みできない VB2008Expressが無料配布していたので始めたばかりの初心者です。 玄人志向の学習リモコン「KURO-RS」(PC-OP-RS1)を操作するアプリを作ろうと試みているのですが、付属のSDKや下記コントロールDLLのVB2008への取り込み方がわかりません。 「PC-OP-RS1-CONTROL.DLL」 http://1c3.world.coocan.jp/wiki/ (「2008-06-08コントロールDLLを作ろう」にあります。VC++ソースもあります) 『参照の追加』を行っても「’~.dll’への参照を追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください」とメッセージが出て取り込むことができませんでした。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など