Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 3DSMax SDK import plugin подключение к плагину dll, проблема с поздним связыванием dll 
V
    Опции темы
Alex_G
Дата 17.3.2009, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 26.7.2004

Репутация: нет
Всего: нет



Други моя, помогите разобраться!

Пишу плагин импорта геометрии для 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);
    }


PM MAIL ICQ   Вверх
Alex_G
Дата 18.3.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 26.7.2004

Репутация: нет
Всего: нет



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

HINSTANCE C1call=LoadLibrary("plugins\\C1.dll");
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.