Визуальная студия 6 Typelibs обрабатывается по-разному в Visual Studio 2008 под Vista и 7?

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

  •  26-09-2019
  •  | 
  •  

Вопрос

Я написал стандартную DLL в Visual Studio 6 C ++. Я также написал Tymelib, чтобы пойти с ним, чтобы его можно было использовать непосредственно в VB6, а не через объявление.

Он отлично работает в VB6 под Windows XP.

Что не работает, - это когда я беру DLL и TLB на Vista и Windows7. Там .tlb регистрирует хорошо с REGTLIB Но единственный символ, который виден в Visual Studio 2008, является Attribution постоянный.

Техника, которую я пытаюсь эмулировать, найден в Как сделать C DLL более доступным для VB с библиотекой типа. Отказ Это тот случай, когда этот метод больше не применяется ???

Код (сокращенный) 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
Это было полезно?

Решение

Проблема здесь заключается в том, что вы не просто изменили операционную систему, вы также изменили свои инструменты разработки. Это должно работать, если вы запустите VB6 на Win7. Но Visual Studio 2008 поддерживает VB.NET, A очень другой язык от VB6. Он только поддерживает «истинные» библиотеки типа, те, которые используют.

Вызов экспортированной функции из DLL требует использования Marshaller P / Invoke, встроенного в .NET .NET. Проверьте dllimportattribute и оператор vb.net объявляют в библиотеке MSDN. Декларация для этой функции должна напоминать это:

<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 будет другим подходом.

Другие советы

Любая причина, по которой вы создаете Typleib, а не только объявлять функции в VB6? Посадка

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

В верхней части вашего модуля кажется намного проще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top