Запуск кода в Managed DLL
От: CodeWolf  
Дата: 05.12.07 12:54
Оценка:
Доброго времени суток всем участникам данного форума..
У меня возникла проблемма с запуком метода из управляемой библиотеки
Вот код метода, который мы вызываем из библиотеки:

namespace Common
{
    public class Class1
    {
        public void Test()
        {
            MessageBox.Show("Cool");
        }
    }
}


Ниже приведен код приложения, которое вызывает
метод Test класса Class1
_Module * Modul;
_Type * type;
_MethodInfo * Method;
if (!Loaded)
{
        int ResourceSize;
        IUnknown   *pAppDomainPunk = NULL;
    BYTE * pResData;
    LPVOID pBuf = NULL;
    HRESULT hr;
    VARIANT var;
    VARIANT RetCod;
    _Assembly ** AssArr;
    SAFEARRAY * psArr = NULL;
    ReadFile (hFile, pResData, FileSize, &Read, NULL);
    if (pResData==NULL)
    {
        return;
    }
    long retCode = 0;
    psArr = SafeArrayCreateVector(VT_UI1, 0, FileSize);/// последнее значение
    SafeArrayAccessData(psArr,&pBuf);
    memcpy (pBuf, pResData, FileSize);
    SafeArrayUnaccessData(psArr);
    SAFEARRAY * Types;
    hr = ApplicDomain->Load_3(psArr, &Ass);
    if (hr==S_OK)
    {
        Loaded = true;
    }
    hr = Ass->GetModule(SysAllocString(L"Common.dll"),&Modul); 
    if (hr!=S_OK)
        return;
    BSTR FullName;
    Ass->get_FullName(&FullName);
    hr = Ass->GetType_2(SysAllocString (L"Common.Class1"), &type); 
    if (hr!=S_OK)
        return;
    type->GetMethod_6(SysAllocString (L"Test"), &Method);
    VARIANT RetCode;
    VariantInit (&var);
    SAFEARRAY* arguments = SafeArrayCreateVector(VT_VARIANT, 0, 1);    
    SAFEARRAYBOUND bounds[] = {{1,0}};              //Array Contains 'nCount' Elements starting from Index '0'
        var.vt            = VT_ARRAY | VT_CLSID;
    var.parray  = SafeArrayCreate(VT_CLSID,1,bounds);     //Create a one-dimensional SafeArray of variants
        if(var.parray == NULL)
              return;
        long lIndex[] = { 0 };
        SafeArrayPutElement(arguments, lIndex, &var);
    hr = Method->Invoke_3(var, NULL, &RetCode);
    if (hr!=S_OK)
        return;

Однако данный код не работает...
Кто может подсказать, как заставить это работать?
Заранее благодарен...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.