![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
dll на c++ [D6, Win2k]
dimmu2 © (2002-05-05 14:39:00)Добрый день, уважаемые Мастера! У меня ест довольно интересный вопрос по программированию dll и я искренне надеюсь получить на него ответ.
Дело обстоит следующим образом: необходимо написать dll на C++ и экспортировать из нее функции/процедуры в приложение на delphi.
Я написал несколько вариантов и все, что мне удалось – сообщение о невозможности найти точку входа используемой процедуры в dll. Я уже писал dll на delphi и в приложениях, опять же, на delphi их получалось вызывать без проблем. Понятно, что dll для того и созданы, чтобы писать их на другом языке, нежели основное приложение. Во-первых, о вызове функций – я использовал неявный вызов (вообще-то можно было бы использовать и явный вызов, но для того, чтобы освоить методику, я думаю и неявный вызов подойдет). Значит, вызываю функцию я следующим образом:
function sum(a,b: integer): integer; cdecl; external ‘test.dll’;
Я надеюсь, что здесь все без ошибок, и можно перейти к основной части – код в dll – потому что, как мне кажется вся проблема именно в нем. Я пишу dll в VC6; первую процедуру он создает сам, вторая моя, вот код dll:
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
__declspec(dllexport) int __cdecl sum(int a,int b){
return (a+b);
}
Короче говоря, чего здесь не хватает?
s@shka (2002-05-10 16:08:00) [1]HELP А как добиться работы в обратном порядке. То есть dll написанную на Дельфях запихнуть в С
dimmu2 (2002-05-06 07:26:00) [2]Спаибо, действаительно все работает!
ghost_by (2002-05-05 21:58:00) [3]С++ изменяет имя функции путем добавления в конец имени информации о результате функции и входных параметрах.
Попробуй так:
extern "C"{
int __cdecl sum(int a,int b);
};
__declspec(dllexport) int __cdecl sum(int a,int b){
return (a+b);
}
Должно работать.
~Sergius (2002-05-05 19:29:00) [4]имхо, процедуру в си лучше объявлять как pascal, уже как минимум одна проблема минус (с порядком описания параметров). Попробуй, может подойдёт. В виндовс апи так подавляющее большинство функций описано