2010-02-02 3 views
0

GPH одноэлементно класс, без метода GetInstanceпроблемы компоновщика статического доступа Член

class gph 
{ 
public: 

    static void newfun(); 
    static void newfun1(); 

    //...// 

private: 
    gph(); 

}; 

Этот класс получает встраивать в статическую библиотеку

Теперь у меня есть Dll откуда мне нужно получить доступ к статической функции , Так класс А является частью Dll

У меня есть ++ функцию-член C сказать

void A:: fun() 
{ 

    gph::newfun() ; //accessing a static function : gives linker errors 
} 

С другой стороны, если я высмеивать() как статические оно не дает мне какие-либо ошибки компоновщика. Но я не хочу делать забавные() как статические

+1

Если вы получаете ошибки компоновщика, то есть, скорее всего, разница в подписи вашей функции-члена в декларации и определения (.cpp/.h). –

+4

Можете ли вы рассказать нам, что такое ошибки – Yacoby

+5

Вам нужно показать нам больше кода - например, определение gph и его связь с A. – 2010-02-02 13:59:02

ответ

0

Большинство из того, что я работаю над сделками со статически связанными библиотеками, так что этот ответ может не применяться, но может вам помочь. Поэтому, основываясь на этом и на том, что я сейчас рассматриваю, моя первая мысль состояла в том, чтобы проверить, что в DLL, которую вы создаете, вы включили статическую библиотеку.

Неразрешенный символ обычно означает, что подпись не соответствует или вы не включаете необходимую библиотеку. Он варьируется от компилятора до компилятора, но в большинстве случаев вы указываете каталог библиотеки (иногда обозначаемый -L в командной строке) и фактическую библиотеку, для которой она связана (иногда обозначается -l).

Поскольку я не использую DLL настолько, мое понимание их похоже на создание исполняемого файла. Если вы используете динамическую компоновку при сборке, путь к библиотекам, к которым вы привязываетесь, встроен в ваш исполняемый файл, поэтому размер исполняемого файла меньше, но зависит от пути библиотеки, к которому они привязаны, к не движется.

Итак, когда вы создаете свою DLL, убедитесь, что вы скомпилировали cpp для класса gph и создали для него статическую библиотеку. Затем, когда вы используете его в классе A, вы включаете заголовок и ссылку в библиотеке.

0

Я думаю, что это проблема вызова.

Пожалуйста, попробуйте следующий код:

class gph 
{ 
public: 

    static void __cdecl newfun(); 
    //...// 

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