2010-12-21 20 views
3

C#.NETでWin32 .dllファイルを書き込むことは可能ですか? はいの場合は、チュートリアルをどこで見つけることができますか? いいえ、Win32.DLLを書くためのあなたの提案は何ですか?C#.NETでWin32 .dllファイルを書き込むことは可能ですか?

ありがとうございました。

+2

あなたは何を達成しようとしていますか? 'Write Win32.dll'はもっと多くのコンテキストがなければ意味がありません。 – Oded

+1

既存のWin32 DLLを呼び出すか、C#をネイティブWin32コードにコンパイルしますか? –

+0

私はC#のコードと同じように、他のアプリケーションが使用できるネイティブのwin32 DLLを書きたいと思っています。[DllImport( "myLibrary.dll")] – losingsleeep

答えて

2

Win32形式のエクスポートで古典的なWin32 DLLを作成しようとしているようですね? (Win32形式のエクスポートは、DllImportがピックアップするものです。)マネージコード(C#またはマネージC++)ではこれを行うことはできません。私が知る限り、アンマネージC/C++を使用してそれを行う必要があります。

プログラミングWindowsのCharles PetzoldまたはWin32のプログラミングに関する同様の書籍は、開始するのに適しています。または「hello world」Win32 DLLサンプルを検索してください。または、Visual StudioでWin32 DLLプロジェクトを作成し、作成したファイルを確認します。開始するためのプレースホルダテキストが必要です。

マネージコードでは拡張子が.dllのファイルも使用されますが、実際にマネージコードのコンテナであり、Win32形式のエントリポイントがないため、Win32エントリポイントが必要な他のコードでは使用できませんそれら。混乱を避けるために、dllではなく「管理アセンブリ」と呼ばれることがあります。

-

アップデート - 代替オプションがあるかもしれません:あなたは、ネイティブコードとマネージコードの両方が含まれているDLLである"Mixed mode DLL"と呼ばれるものを作成することができます。このDLLには、エクスポートするマネージC#クラスと、Win32スタイルのAPIをエクスポートする少量の混合C/C++があります。これは可能ですが、必ずしも良いことではありません。プレーンなWin32 DLLをロードすることを期待しているコードは、結果としてロードされたCLRを取得することを期待していないかもしれません。プロセスに既に衝突しているバージョンのCLRが既にロードされている場合は、問題が発生する可能性があります。混合モードDLLは、C#/マネージコードをWin32 DLLと偽装するのではなく、C#アセンブリがC/C++コードを再利用できるようにするためにより有用です。

0

もちろん、C#でDLLファイルを作成することはできます。

Visual Studioで新しいプロジェクトを作成するときに、プロジェクトタイプでクラスライブラリを選択するだけで済みます。 http://www.c-sharpcorner.com/uploadfile/mahesh/dll12222005064058am/dll.aspx

+1

ネイティブwin32 dll(デバイスドライバブリッジとして) Windowsアプリケーションで使用できます。ありがとう。 – losingsleeep

1

あなたはCOMオブジェクトとして書き込む任意の.NETアセンブリを公開することができます:ここで

はチュートリアルです。

these tutorials(VS 2003の場合でも有効ですが)を参照してください。

+0

私はC#.NETでCOM DLLを作成し、ネイティブなWin32 DLLのように使うことができますか?たとえば、[DllImport( "myLibrary.dll")]属性(など)でネイティブのwin32 DLLをインポートすることができます.COM DLLでは可能ですか? – losingsleeep

+1

@ user434186 - C#を使用すると、COM DLLを書き込むことはできません。私の答えにリンクしているチュートリアルの手順に従えば、COM dllのようなものを使うことができます。 – Oded

3

はい、可能です。実際にはそのためのツールがあります。これは、Rainmeterアプリケーションでは少し隠されています。

Rainmeter SDK for C#には、パブリック静的メソッドをネイティブアプリケーションが呼び出し可能な外部関数に変換する実行可能ファイルCS_DLL_FOR_C.exeが含まれていました。実際にRainmetere自体がLoadLibrary

によってC++と負荷のプラグインで開発されたあなたは、以下のリンク

x64 version

PS

x86 version

を使って、このツールのx86およびx64バージョンをダウンロードすることができます:私は知りませんRainmeterのライセンスに違反している場合は、このツールを配布してください。

関連する問題