2013-12-13 3 views
3

У меня есть 6.0 DLL VB, который имеет метод, как показано ниже:Как динамически загружать dll VB 6.0 в C#?

Public Function PrintDemo() As Integer 
PrintDemo = 10 
End Function 

библиотека DLL зарегистрирована на моей машине. Мне нужно динамически загружать эту dll в C#. Ниже способ, которым я пытался в C#:

Type obj = Type.GetTypeFromProgID("Project1.Class1"); 
object ins = Activator.CreateInstance(obj); 

var method1 = obj.InvokeMember("PrintDemo", BindingFlags.InvokeMethod, null, obj, null); 
Console.WriteLine(method1); 

библиотека DLL становится успешно загружен, но я не могу ссылаться на него.

Может ли кто-нибудь помочь мне в этом?

+0

Вы никогда не передавая экземпляр (INS) в элемент Invoke. Это может быть одна проблема –

+0

Для чего вы пытаетесь сделать, возможно, этот подход лучше: http://stackoverflow.com/questions/4310681/how-do-i-call-a-visual-basic-6-0- method-in-c –

+0

@drew_w, но тогда это не было бы динамичным, и не было бы вам вынуждено регистрировать ActiveX DLL на всех компьютерах, которые должны запускать его, и каждый раз, когда вы что-то меняете? – GalaxyNetworks

ответ

3

Попробуйте изменить

obj.InvokeMember("PrintDemo", BindingFlags.InvokeMethod, null, obj, null); 

// To... 
obj.InvokeMember("PrintDemo", BindingFlags.InvokeMethod, null, ins, null); 

Я считаю, что вы должны посылать копии «плюсы» в качестве цели, а не типа. В противном случае не было бы причин создавать экземпляр.

Это очень долго, так как я работал с отражением ...

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