2012-02-13 4 views
6

Я пытаюсь вызвать dll vb6 из приложения C sharp, без использования реестра. Я хочу использовать путь к dll при его использовании. Я не могу создать объект класса dll vb. Пожалуйста помоги! Код, который я написал до сих пор выглядит следующим образом:Вызвать vb6 dlls из C#

Assembly assem = Assembly.LoadFile("dll path"); 
Type classType = assem.GetType("classname"); 
MethodInfo method = classType.GetMethod("show"); //My methos is called show 
method.Invoke(null,null); // I have to invoke the method using class object, which I am unable to create 
+5

'VB6' библиотеки DLL должен быть' PInvoked', как вы в настоящее время погрузки их для '.NET' библиотек DLL – fardjad

+0

@bhavna Я не уверен, если вы можете использовать VB6 DLL с помощью' Assembly.LoadFile '. Вы пытались вызвать функцию с помощью [PInvoke] (http://msdn.microsoft.com/en-us/library/aa288468%28v=VS.71%29.aspx)? – Searock

+0

Хорошо. Большое спасибо за подсказку. Но я очень новичок в c. Framework framework. Не могли бы вы посоветовать мне, как код для вызова метода из dll vb6 должен быть написан c c sharp? Любая помощь будет оценена по достоинству. – bhavna

ответ

1

Предполагая, что метод show в таблице экспорта в DLL, попробуйте использовать DllImportAttribute вызвать метод показа.

+0

Это один хороший подход – Ravia

+1

99 раз из 100 VB6 DLL не будет показывать ничего полезного через таблицу экспорта. Это COM DLL. (* Редко * автор DLL использовал бы методы blackbelt для экспорта функций, как если бы DLL представляла собой DLL старого стиля.) – MarkJ

+0

Не могли бы вы привести пример кода, необходимого для этого? – bhavna

6

VB6 DLL - это COM-библиотека. Обычно вы регистрируете DLL (в реестре), а затем добавляете ссылку на DLL VB6 из вашего проекта .NET.

Этот MSDN article дает пошаговое руководство по использованию COM-приложения без регистрации.

+0

Спасибо, ребята, за вашу помощь, но эти статьи предоставляют информацию об использовании только DLL win32: «(У меня есть db vb6, который будет использоваться в C# , – bhavna

+1

Ссылка содержит информацию о .Net клиентах и ​​серверах VB6. Посмотрите этот раздел, шаг 2, часть B http://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic5, и этот раздел http://msdn.microsoft.com/en-us/library/ms973913 .aspx # rfacomwalk_topic7. Я согласен, что было бы лучше, если бы статья не пыталась охватить C++, C#, VB.Net и VB6 все в одной статье! – MarkJ

2

Ваши DLL VB6 как упоминания MarkJ являются COM-Dll, и их обычно необходимо зарегистрировать, используя regsvr32, прежде чем вы сможете их использовать.

После регистрации вы можете добавить ссылку на нее так же, как и с .NET dll, то есть щелкнуть правой кнопкой мыши ссылку «Ссылки» в проекте, нажать «Добавить ссылку», затем выбрать вкладку «COM» в окне и найти Имя COM-Dll.

Тогда вы должны иметь возможность использовать его как ссылку .NET.
Вот пример использования ссылки COM на Microsoft Excel.
How to: Use COM Interop to Create an Excel Spreadsheet

Если вы специально хотите позднего связывания, то ваш длл еще должен быть зарегистрирован, но не вручную добавить ссылку, используйте Activator.CreateInstance(), чтобы получить экземпляр вашего COM-объекта.
Calling COM component from C# using late binding

+0

Привет, мне нужно использовать его позже привязки, не используя информацию реестра. Это проблема! – bhavna

+1

Можете ли вы дать мне более подробную информацию о вашем сценарии, пожалуйста? Будет ли dll регистрироваться в целевых системах и просто не на вашем? Потому что я не думаю, что на самом деле возможно использовать COM-библиотеки DLL без их регистрации. – Nanhydrin

+0

Эта статья может быть релевантной [Регистрация бесплатной активации COM-компонентов] (http://msdn.microsoft.com/en-us/library/ms973913.aspx) – Nanhydrin

Смежные вопросы