最初に「DLL概要」と 「エクスポートとインポートとリンク」を 読むと、すんなりと理解できるでしょう。 MSDNより引用しますが、説明はこれだけで十分です。 あとはサンプルを書いてみます。 __declspec(dllexport) キーワードを使うと、データ、関数、クラス、クラスのメンバ関数を DLL からエクスポートできます。__declspec(dllexport) を使う場合、エクスポート用の .DEF ファイルは不要です。 関数をエクスポートするには、呼び出し規約キーワードが指定されている場合、__declspec(dllexport) キーワードは呼び出し規約キーワードの左に記述します。以下に例を示します。 __declspec(dllexport) void __cdecl Function1(void); クラス内のすべてのパブリック データ メンバおよびメンバ関数をエクス
VCで作成できるDLLには、大きく分けてWin32DLL,MFCDLLがあります。 Win32DLLは、MFCを使用しないDLLです。 また、MFCDLLには、レギュラーDLLと、拡張DLLがあり、 レギュラーDLLが、MFCを内部的に利用するDLL, 拡張DLLが、MFCライブラリクラスから派生したクラスをDLLを作成するとき に使うDLLです。まず、Win32 DLLを説明します。DLL内の関数を他のプログラムから呼び出すには、 その関数をエクスポートする必要があります。 エクスポートするには、declspec(dllexport)キーワードを 使用するか、DEFファイルを使用する方法があります。また、DLLをリンクするには、以下の2つの方法があります。・暗黙的リンク(静的リンク) ・明示的リンク(動的リンク) このようにDLLには、作成、使用方法にいくつか種類があります。そ
pythonて言語には元からCでのAPIがあるのですが、いちいちpythonの中のオブジェクトとCでの変数とをやり取りする際に型の変換が必要になります。pythonの世界では全ての変数がオブジェクトなので仕方ないのですが・・・。そこで、ctypesというモジュールを使うことで、ある程度簡単にこの変数の型変換を行えるようになります。pythonからCのDLLを呼んだり、pythonからCの関数をcallしたりする際には重宝しそうです。 以下、簡単なサンプルです。 まず、python側のコード import ctypes # DLLをロード lib = ctypes.cdll.LoadLibrary("CalcDll.dll") # 関数呼び出し print lib.fnCalcDll(None) # 配列渡し TenIntegers = ctypes.c_int * 10 ii = TenI
C/C++でDLLを作成した後、そのDLLの動作確認を行うには別途プログラムが必要になってきますが*1、それにまたC/C++を用いるのはあまり効率が宜しくないと前から思っていて、スクリプトを使ってもっとお手軽にしたいと考えていたのを少し実践してみました。 なぜC/C++でテストプログラムを作成するのが効率が悪いのかといえば、C/C++はコンパイル言語だからです。コードを書いて実行する前に、当然のことながら毎回コンパイルしてリンクして...といった作業が必要になりますが、ちょっと関数のパラメータを書き換えたいというだけの時にもこの作業を通さなければならないのは結構苦痛です。まあパラメータを標準入出力なりGUIなりで入力できるようにするという手もありますが、あまり凝ってしまうとテストプログラムの作成の方に時間を取られてしまってそれはそれで問題です。 そこで、Pythonを用いてDLLのテストコ
[ IT・家電(総合) - Apple・Mac・iPhone | かんたん!ブログをはじめてみよう ] livedoor ホーム リンゴの水やり 移転しました。引き続きリンゴの水やり?(はてな)を宜しくお願いします。 http://d.hatena.ne.jp/gutskun/ 2004年10月09日 C++で作ったDLLをC#で使用する 目次 C++で作ったDLLをC#で使用する 1 C++で作ったDLLをC#で使用する 2 C++で作ったDLLをC#で使用する 3 C++で作ったDLLをC#で使用する 4 C++で作ったDLLをC#で使用する 5 C#でC配列を使用する 関連記事: log4net NUnit gutskun at 11:48│Comments(0)│TrackBack(0)│.Net トラックバックURL この記事にコメントする 名前: メール: URL: 情報を記憶
アセンブリ内のすべての型を取得するまず、Assemblyオブジェクトを取得する基本的な方法について説明します。アセンブリのファイル名を指定してアセンブリを読み込むには、Assembly.LoadFromメソッドを使用します。アセンブリの完全限定名によりアセンブリを読み込むには、Assembly.Loadメソッドを使用します(アセンブリの完全限定名およびその取得方法については、ヘルプの「アセンブリ名」をご覧ください)。さらに、現在のコードを実行しているアセンブリはAssembly.GetExecutingAssemblyメソッドで、アプリケーションドメインに読み込まれているすべてのアセンブリはAppDomain.GetAssembliesメソッドで取得することができます。 次にこれらを使ってAssemblyオブジェクトを取得する例を示します。 'Imports System.Reflecti
2007/11/3022:31 【VB.NET】動的にDLLファイルをロードする VB.NETでは、DLL等のライブラリを利用する場合、参照設定を行って静的にロードするファイルを指定するのが一般的である。しかし、C言語等のようにプログラム中にロードするファイルを指定したい場合もある。 (プラグインを読み込むタイプのプログラムを作成する等) この技法を使う機会があるかは不明であるが、参考までに実装方法について説明する。 但し、一番単純な実装方法のサンプルなので、実用性は低い。 本来の用途を考えると、DLLが増えても本体となるプログラムの改修を必要としないのが理想である。(バージョンアップやバグフィックスの場合には、本体の改修も必要となるが…) そのため、DLLのインターフェースを統一し、呼び出し方法を統一する等の工夫が必要となる。 以下、サンプル。 《呼び出される側のプログラム(DLL)》
C#で動的にDLL(ライブラリ)をロードしてアセンブリを作って、P/Invokeなdelegateを生成 動的にDLL(ライブラリ)をロードするというシナリオは、意外と要求されることが多いのではないかと思います。 利用する関数があらかじめ明確になっているのであれば、そのまま直実装でも構わないのですが、 それが明確になっていないような場合、あるいは都度動的に変化するというような場合では、一筋縄にはいきません。 そんな場合は、P/Invokeなdelegateについても動的に生成することを検討してみるとよさそうです。 具体的な方法を簡単に説明します。まずWinAPIのLoadLibrary関数でDLL(ライブラリ)をロードします。 続きまして、アセンブリを動的に生成し、またそのアセンブリに動的にクラスを作成します。 その動的に作成したクラスについて、読み込んだDLLから関数ポインタを積んだメソ
DLLが配置されているパスを気にせずに複数のアプリケーションから参照したい場合、DLLをグローバルアセンブリキャッシュ(GAC)に登録するという方法があります。 GACはアプリケーション間で共通に参照されるグローバルな領域です。 プロジェクトの作成・設定 プロジェクトのプロパティを開く 著名を選択して以下の設定を行う アセンブリの署名にチェック 厳密な名前のキーファイルを選択してください 新規作成:「プロジェクト名.snk」とする よくわからないときはパスワード保護は無しで GACキャッシュへの登録 DLLをGACへ登録します。 gacutil -i 生成されたDLLファイル GACキャッシュから削除する場合 削除するときはDLLファイル名ではなくアセンブリ名で削除する アセンブリ名はプロジェクトのプロパティで確認できる。 gacutil -u アセンブリ名 アプリケーションからGACにキ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く