Visual Studio 6 Typelibs unterschiedlich in Visual Studio 2008 unter Vista behandelt und 7?

StackOverflow https://stackoverflow.com/questions/4020592

  •  26-09-2019
  •  | 
  •  

Frage

Ich habe einen Standard-DLL in Visual Studio 6 C ++ geschrieben. Ich habe auch eine typelib zu gehen mit ihm geschrieben, so dass es direkt in VB6 verwendet werden kann, anstatt über Declare.

Es funktioniert gut in VB6 unter Windows XP.

Was nicht funktioniert ist, wenn ich die DLL und den TLB in Vista und Windows7 nehmen. Dort wird die TLB-Register fein mit REGTLIB aber das einzige Symbol, das in Visual Studio 2008 sichtbar ist, ist die Attribution konstant.

Die Technik, die ich versucht bin zu emulieren wird unter gefunden Wie C DLL Mehr zu VB zugänglich machen mit einem Geben Sie Bibliothek . Ist es der Fall, dass diese Technik nicht mehr gilt ???

(abgekürzt) ODL-Code wird im Folgenden wiedergegeben. Jede Idee, was ist los?

// 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
War es hilfreich?

Lösung

Das Problem hier ist, dass Sie nicht nur das Betriebssystem geändert, können Sie auch Ihre Entwicklungstools geändert. Es sollte immer noch funktionieren, wenn Sie VB6 auf Win7 laufen. Aber Visual Studio 2008 unterstützt VB.NET, eine sehr andere Sprache aus VB6. Es unterstützt nur ‚true‘ Typbibliotheken, diejenigen, die COM-Anwendungen.

eine exportierte Funktion aus einer DLL aufrufen erfordert unter Verwendung der P / Invoke Einweiser in .NET gebaut. Schauen Sie sich DllImportAttribute und die VB.NET Declare-Anweisung in der MSDN Library. Die Erklärung für diese Funktion sollte dies aussehen:

<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

Keine Notwendigkeit, eine Art Bibliothek mit dieser registrieren. Schreibe eine verwaltete Klasse-Wrapper in der C ++ / CLI Sprache wäre ein anderer Ansatz.

Andere Tipps

Gibt es Gründe, Sie typelib zu schaffen und nicht nur Funktionen in VB6 zu erklären? Putting

Private Declare Function BEA_A Lib "bobde.dll" _
(ByVal p1 As String, ByVal p2 As String) As String 

an der Spitze des Moduls scheint viel einfacher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top