Sono Visual Studio 6 typelibs gestite in modo diverso in Visual Studio 2008 sotto Vista e 7?

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

  •  26-09-2019
  •  | 
  •  

Domanda

Ho scritto una DLL standard in Visual Studio 6 C ++. Ho anche scritto una libreria dei tipi di andare con lui in modo che possa essere utilizzato direttamente in VB6 piuttosto che attraverso Declare.

Funziona bene in VB6 sotto Windows XP.

Quello che non funziona è quando prendo la DLL e il TLB in Vista e Windows7. C'è il bene registri .TLB con REGTLIB ma l'unico simbolo che è visibile in Visual Studio 2008 è la costante Attribution.

La tecnica che sto cercando di emulare si trova al Come Fare C DLL più accessibile per VB con una tipo di libreria . E 'il caso che questa tecnica non si applica più ???

L'(abbreviato) codice di ODL è riprodotto qui di seguito. Qualche idea di cosa sta succedendo?

// 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
È stato utile?

Soluzione

Il problema qui è che non solo ha cambiato il sistema operativo, è anche cambiato gli strumenti di sviluppo. Esso dovrebbe funzionare se si esegue VB6 su Win7. Ma di Visual Studio 2008 supporta VB.NET, un molto lingua diversa da VB6. E 'solo 'veri' librerie dei tipi supporti, quelli che usi COM.

Parlando una funzione esportata da una DLL richiede utilizzando P / Invoke marshaller integrato nel NET. Scopri DllImportAttribute e l'istruzione Declare VB.NET in MSDN Library. La dichiarazione per la funzione che dovrebbe assomigliare a questo:

<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

Non c'è bisogno di registrare una libreria dei tipi con questo. Scrivere un wrapper classe gestita in C ++ / CLI lingua sarebbe un altro approccio.

Altri suggerimenti

Qual è il motivo che si sta creando libreria dei tipi e non solo dichiarando funzioni in VB6? Mettendo

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

nella parte superiore del modulo sembra molto più semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top