· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Если есть свои lib и dll как использовать эти функции в С++ ?

Посл.отвђт Сообщенiе


Дата: Сен 2, 2004 17:58:34 · Поправил: _animaTOR_

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

Если так , ...
#include "stdafx.h"
#pragma comment(lib,"моя_библиотека.lib" )


 int main(int argc, char* argv[])
{
	printf("Hello World!\n");
	моя_функция();

	return 0;
}
                 
... то
error C2065: 'моя_функция' : undeclared identifier

Спасибо.


Дата: Сен 2, 2004 18:13:21

_animaTOR_

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


Дата: Сен 3, 2004 04:43:45

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


Дата: Сен 3, 2004 10:27:35 · Поправил: _animaTOR_

... спасибо за ответы, но, не сочтите за Безтактность, все-таки подскажите где об этом писалось на форумах. Я тут уже и в Project -> Settings -> Link -> ... ee добавил - не достаточно. И по форуму искал по словосочетанию - "прилинковать lib"? нет ничего. И прототип (по указанию Asterix-а ) в виде строки :
  #include "stdafx.h"
  #pragma comment(lib,"моя_lib.lib" )
  
  void моя_функция (void);
  int main(int argc, char* argv[])
 {
	printf("Hello World!\n");
	моя_функция ();
	return 0;
 }

... в masm там проще :
    includelib моя_lib.lib
    моя_функция PROTO
    <...>
    invoke моя_функция 

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


Дата: Сен 3, 2004 12:17:08 · Поправил: Kozyr

_animaTOR_

Вроде нужно так:
extern "C" void __stdcall твоя_функция (void)


Дата: Сен 3, 2004 16:31:02

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


Дата: Сен 4, 2004 03:56:29

> extern "C" void __stdcall твоя_функция (void)
это Си++, а на Си такое уже не прокатит ;) это во-первых
тип вызова должен быть задан явно. это во-вторых.
в третьих, Си в отличии от Си++ не требует никаких extern'ов, достаточно лишь просто описать прототип функции.
вот пример как это можно сделать на масме.
кстати говоря, использовать stdcall неразумно. уж лучше fastcall - он передает аргументы через регистры, правда порядок передачи варьируется от компилятора к компилятору

_166048313__lib.zip


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.059