Если есть свои lib и dll как использовать эти функции в С++ ?

Тема в разделе "WASM.WIN32", создана пользователем _animaTOR_, 2 сен 2004.

  1. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    Добрый день!

    Научился писать на masm dll-ки. Хочется поиспользовать их в программах на С. Подскажите пожалуйста как правильно их (lib- ы )подключить в проект VC++ 6.0 ?



    Если так , ...


    Код (Text):
    1. #include "stdafx.h"
    2. #pragma comment(lib,"[b]моя_библиотека[/b].lib" )
    3.  
    4.  
    5.  int main(int argc, char* argv[])
    6. {
    7.     printf("Hello World!\n");
    8.     [b]моя_функция[/b]();
    9.  
    10.     return 0;
    11. }
    12.                  
    ... то

    error C2065: 'моя_функция' : undeclared identifier



    Спасибо.
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    _animaTOR_



    А ты прототип своей функции (пр)описАл?
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    _animaTOR_

    Компилятор ясно пишет: undeclared identifier, т.е. неопределённый идентификатор (имя функции). О том как правильно определить этот самый идентификатор неоднократно писали в форуме.
     
  4. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    ... спасибо за ответы, но, не сочтите за Безтактность, все-таки подскажите где об этом писалось на форумах. Я тут уже и в Project -> Settings -> Link -> ... ee добавил - не достаточно. И по форуму искал по словосочетанию - "прилинковать lib"? нет ничего. И прототип (по указанию Asterix-а ) в виде строки :

    Код (Text):
    1.  
    2.   #include "stdafx.h"
    3.   #pragma comment(lib,"моя_lib.lib" )
    4.  
    5.   [b]void моя_функция (void);[/b]
    6.   int main(int argc, char* argv[])
    7.  {
    8.     printf("Hello World!\n");
    9.     моя_функция ();
    10.     return 0;
    11.  }


    ... в masm там проще :
    Код (Text):
    1.  
    2.     includelib моя_lib.lib
    3.     моя_функция PROTO
    4.     <...>
    5.     invoke моя_функция


    ... а в этом VC? ...
     
  5. Kozyr

    Kozyr New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2004
    Сообщения:
    6
    Адрес:
    Ukraine
    _animaTOR_



    Вроде нужно так:

    extern "C" void __stdcall твоя_функция (void)
     
  6. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    Kozyr

    ... да , так и есть...получилочь! :) Спасибо!
     
  7. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    > extern "C" void __stdcall твоя_функция (void)

    это Си++, а на Си такое уже не прокатит ;) это во-первых

    тип вызова должен быть задан явно. это во-вторых.

    в третьих, Си в отличии от Си++ не требует никаких extern'ов, достаточно лишь просто описать прототип функции.

    вот пример как это можно сделать на масме.

    кстати говоря, использовать stdcall неразумно. уж лучше fastcall - он передает аргументы через регистры, правда порядок передачи варьируется от компилятора к компилятору

    [​IMG] _166048313__lib.zip