Visual Studioの6つのタイプライブラリは、Vistaと7の下で2008年のVisual Studioの異なる方法で処理されていますか?
-
26-09-2019 - |
質問
私は、Visual Studio 6 C ++で標準DLLを書かれています。私もそれはVB6ではなく、宣言を経由して直接使用することができるようにして行くためにタイプライブラリを書かれています。
これは、Windows XPの下でVB6で罰金を動作します。
私はVistaとのWindows7にDLLとTLBを取るとき仕事とは何かされません。 REGTLIB
が、Visual Studioの2008年に表示されている唯一のシンボルと.TLBレジスタの罰金はAttribution
定数があります。
私がエミュレートしようとしてる技術は、AとVBとC DLLにアクセスしやすくするためにどのようにで発見されますライブラリに入力します。それは、この技術は、もはや???
適用されている場合ではありませんは(略す)ODLコードは、再生されます。何が起こっているすべてのアイデア?
// This is the type library for BOBDE.dll
[
// Use GUIDGEN.EXE to create the UUID that uniquely identifies
// this library on the user's system. NOTE: This must be done!!
uuid(EE090BD0-AB6C-454c-A3D7-44CA46B1289F),
// This helpstring defines how the library will appear in the
// References dialog of VB.
helpstring("BOBDE TypeLib"),
// Assume standard English locale.
lcid(0x0409),
// Assign a version number to keep track of changes.
version(1.0)
]
library BOBDE
{
// Now define the module that will "declare" your C functions.
[helpstring("Functions in BOBDE.DLL"), version(1.0),dllname("BOBDE.dll")]
module BOBDEFunctions
{
[helpstring("Blowfish Encode ASCII for ANSI"), entry("BEA_A")]
void __stdcall BEA_A( [in] BSTR p1, [in] BSTR p2, [out,retval] BSTR* res );
// other very similar functions removed for the sake of brevity
const LPSTR Attribution = "This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)";
} // End of Module
}; // End of Library
解決
ここでの問題は、あなただけのオペレーティングシステムを変更していないということです、あなたも、あなたの開発ツールを変更しました。あなたがWin7の上でVB6を実行する場合それはまだ動作するはずです。しかし、Visual Studioの2008をサポートVB.NET、VB6からの非常にの異なる言語。それが唯一の「真」のタイプライブラリ、ものCOMの使用していることをサポートしています。
DLLからエクスポートされた関数の呼び出しは、.NETに組み込まれたP /呼び出しのマーシャラーを使用する必要があります。 DllImportAttributeとMSDNライブラリのVB.NETのDeclareステートメントをチェックしてください。
:その関数の宣言は、このに似ているはずです<DllImport("bobde.dll")> _
Function BEA_A( _
<MarshalAs(UnmanagedType.BStr)> ByVal p1 As String, _
<MarshalAs(UnmanagedType.BStr)> ByVal p2 As String) _
As <MarshalAs(UnmanagedType.BStr)> String
End Function
これでタイプライブラリを登録する必要はありません。 C ++ / CLI言語でマネージクラスラッパーを書くことは別のアプローチになります。
他のヒント
あなただけのVB6で関数を宣言するタイプライブラリを作成していない任意の理由は?置く
Private Declare Function BEA_A Lib "bobde.dll" _
(ByVal p1 As String, ByVal p2 As String) As String
あなたのモジュールの上部にあるはずっと簡単そうです。