Загрузка DLL VB.net

Я пытался загрузить DLL с помощью Reflector

Imports System.Reflection

У меня есть простой файл DLL, написанный на С++ с использованием /CLR (это весь файл)

using namespace System;


namespace ASSEMBLE{

public class REM{
    public:
        int VALUE(){
            return 100;
        }

    };

};

И внутри моего события VB.net butten click у меня есть

 Dim dllPath As String = "C:\Users\richard\Documents\Visual Studio 2012\Projects\link\link\bin\Release\dlltest.dll"
        ' load the assembly 
        Dim assembly1 As System.Reflection.Assembly = Assembly.LoadFrom(dllPath)
        ' get the type 
        Dim t As Type = assembly1.GetType("ASSEMBLE.REM")
        ' create an instance and add it. 
        Dim c As Object = Activator.CreateInstance(t)


        MsgBox(t.InvokeMember("VAULE", BindingFlags.Default Or BindingFlags.InvokeMethod, Nothing, c, {}))

Когда событие срабатывает (т.е. я загружаю dll), я получаю сообщение об ошибке:

Method 'ASSEMBLE.REM.VALUE' not found

С использованием:

<DllImport("DLL.dll")> Public Shared Function VALUE() As Integer
        End Function

это не вариант. Мне нужно загрузить DLL после выполнения.


person THE AMAZING    schedule 11.01.2014    source источник


Ответы (1)


Ваш класс REM является неуправляемым классом, поэтому отражение не может видеть его методы. Использование параметра компиляции /CLR не приводит к автоматическому принудительному управлению всеми классами. Это просто позволяет вам иметь управляемые классы в вашем проекте.

Чтобы разрешить вызов InvokeMember, вам нужно сделать REM управляемым классом. Это можно сделать, добавив ref в объявление класса следующим образом:

public ref class REM{
    ...
};
person chue x    schedule 16.01.2014