Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
ВнизDLL: C -> Pas ??? Найти похожие ветки
← →
Eugenez (2004-07-22 17:21) [0]Пробовал переписать на Delphi popup-модуль DLL c C++.
Ошибок приложение вызывающее мою dll не дает, однако и НЕ загружается...((
Help needed!!!
Оригинал popup на C++ в конце.
-----------------------------------------------
library gatemsg;
uses
ShareMem,
SysUtils,
Windows,
Classes;
function GetMajorVersion(): integer; export;
begin
result:=1;
end;
function GetMinorVersion(): integer; export;
begin
result:=0;
end;
{/**
* Инициализация подключаемого модуля
* @param szConfigPath [in] путь к конфигурационному файлу
* @return код ошибки
*/}
function InitAppender(const szConfigPath:PChar): integer; export;
var nRes: integer;
begin
nRes := 0;
result := nRes;
end;
{
* Деинициализация подключаемого модуля
* @return код ошибки
*/}
function DeinitAppender(): integer; export;
var nRes: integer;
begin
nRes := 0;
result := nRes;
end;
{
/**
* сообщение
* @param nPriority [in] уровень приоритета сообщения, см. @param szMessage [in] текст сообщения
* @return код ошибки
*/ }
function LogMessage(nPriority: integer; const szMessage:PChar): integer; export;
var nRes: integer;
Prior: string;
begin
nRes := 0;
if (nPriority > 1) then result:=nRes;
MessageBeep(1);
MessageBox(NULL, szMessage, Pchar("msg level"), MB_OK + MB_ICONERROR);
result := nRes;
end;
exports
GetMajorVersion name "GetMajorVersion",
GetMinorVersion name "GetMinorVersion",
InitAppender name "InitAppender",
DeinitAppender name "DeinitAppender",
LogMessage name "LogMessage";
begin
end.
/********************************************************************
Filename : popup.cpp
Description : реализация подключаемого модуля ********************************************************************/
#include <windows.h>
#include "logapp.h"
#if defined(__cplusplus)
extern "C" {
#endif
LOGAPP_API int LOGAPP_DECL GetMajorVersion(void){
return 1;
}
LOGAPP_API int LOGAPP_DECL GetMinorVersion(void){
return 0;
}
/**
* Инициализация подключаемого модуля
* @param szConfigPath [in] путь к конфигурационному файлу
* @return код ошибки
*/
LOGAPP_API int LOGAPP_DECL InitAppender(const char* szConfigPath){
int nRes = 0;
return nRes;
}
/**
* Деинициализация подключаемого модуля
* @return код ошибки
*/
LOGAPP_API int LOGAPP_DECL DeinitAppender(void){
int nRes = 0;
return nRes;
}
/**
* сообщение
* @param nPriority [in] уровень приоритета сообщения, см. @param szMessage [in] текст сообщения
* @return код ошибки
*/
LOGAPP_API int LOGAPP_DECL LogMessage(int nPriority, const char* szMessage){
int nRes = 0;
if(nPriority>1) return nRes;
::MessageBeep(-1);
::MessageBox(NULL, szMessage, "Popup Message", MB_OK | MB_ICONERROR);
return nRes;
}
#if defined( __cplusplus )
}
#endif
← →
ИдиотЪ (2004-07-22 17:29) [1]
var nRes: integer;
begin
nRes := 0;
???
result := nRes;
end;
ты видать чего-то не дописываешь, хитришь )
а какая процедура не загружается?
← →
Григорьев Антон © (2004-07-22 17:29) [2]
> function InitAppender(const szConfigPath:PChar): integer;
>
Например, вот эта строка сразу наводит на подозрения. const char* Var в C++ должен переводится не как const Var:PChar, а как Var:PChar - слова const в C++ и Delphi имеют разные смыслы. Кроме того, по умолчанию C++ используется модель вызова stdcall или cdecl, а в Delphi - register. Выясните, какая модель вызова функций у исходной библиотеки и укажите такую же модель в своих функциях. Кроме того, в C++ существует т.н. декорация имён - когда компилятор реально назначает имена функций, отличные от тех, что используются в программе. Посмотрите с помощью tdump или depends имена в исходной dll и, при необходимости, укажите такие же имена в разделе exports.
← →
han_malign © (2004-07-22 17:58) [3]>по умолчанию C++ используется модель вызова stdcall или cdecl
extern "C" {...} - означает cdecl, без декорации
вопрос, какая компоновка подразумевается в макросе LOGAPP_DECL
хотя раз не падает, скорее всего cdecl, c stdcall(или pascal) - словил бы stack overflow...
← →
han_malign © (2004-07-22 18:02) [4]кстати uses ShareMem, SysUtils, Classes - здесь совершенно лишние, пока не ипользуются динамические строки/массивы - ShareMem не нужен...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c