Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > 3DSMax SDK import plugin подключение к плагину dll


Автор: Alex_G 17.3.2009, 22:13
Други моя, помогите разобраться!

Пишу плагин импорта геометрии для 3DSMax9, пишу в MSVS 2008, все было прекрасно, сделал тестовый плагин, импортировал пару треугольников. Дальше, для того, что бы не загружать/выгружать каждый раз 3DSMax, решил вынести реализацию логики в dll, что бы подключать ее по мере изменения (плагины 3DSMax нельзя выгружать и загружать после запуска проги). И тут началось ... первое, что я получил от макса 

run-time check failure #3 - the variable 'gobj1' is being used without being initialized

переменная  gobj1 это указатель на экспортируемую функцию, вот код:

Код

C1.h
 extern "C" {
    __declspec(dllexport) int gobj(int i);
}

C1.cpp
#include "stdafx.h"
#include "C1.h"

int gobj(int i) {
    return 17;
}

dllmain.cpp
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}


Код

#include "P1.h"
#include "Windows.h"

...

    typedef int (*Tgobj1) (int);
    Tgobj1 gobj1;
    HINSTANCE C1call=LoadLibrary("C1.dll");
    if (C1call!=0) {
        gobj1=(Tgobj1)GetProcAddress(C1call,"gobj");
    }

    int i1=1;
    
    if (gobj1!=0) {
        i1=(*gobj1)(4);
    }


Автор: Alex_G 18.3.2009, 12:09
все, разобрался, длл надо было кидать в папку к исполняемой проге или путь указать относительный, к той папке где лежит исполняемый модуль. В моем случае так: 

HINSTANCE C1call=LoadLibrary("plugins\\C1.dll");

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)