Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Вниз

Помогите пожалуйста перевести код с Си на Delphi   Найти похожие ветки 

 
leonidus ©   (2005-11-30 09:19) [0]

Собственно есть dll, в ней есть функция:

int LWNewRecord( CString NameFile, CString szWord, CString szTransc, CString szTransl );
где
 NameFile - имя файла базы данных с расширением .pdb
 szWord - 1-е слово
 szTransc - 2-е слово
 szTransl - 3-е слово

Функция  открывает файл NameFile для записи, создает если такого файла нет и записывает в него данные, после чего закрывает указанный файл.

возвращает:
 1 - запись успешно добавлена
-1 - ошибка

Ок, теперь есть пример импортирования этой функции на Си:

typedef int (WINAPI *LWNewRecord)(CString, CString, CString, CString);
void CMainFrame::OnTest()
{
   HINSTANCE hinstLib;
   LWNewRecord ProcAdd;

   // Получаем дескриптор модуля DLL.
   hinstLib = LoadLibrary("lwdb.dll");

   // Если дескриптор получен, то пробуем получить адрес функции
   if (hinstLib != NULL)
   {
       ProcAdd = (LWNewRecord) GetProcAddress(hinstLib, _T("LWNewRecord"));

       // Если адрес функции получен, то вызываем функцию.
       if (NULL != ProcAdd) {
                       CString sNameFile= _T("words.pdb");
                       CString sWord= _T("hello");
                       CString sComm= _T("");
                       CString sTransl=_T("привет");

                       int rez= (*ProcAdd)(sNameFile,sWord,sComm,sTransl);
       }
       // Освобождаем модуль DLL.
       FreeLibrary(hinstLib);
   }
}

И теперь простой вопрос, как мне этот код переделать на Delphi?


 
Digitman ©   (2005-11-30 09:54) [1]


> как мне этот код переделать на Delphi?


боюсь что никак.

CString - это С-шный класс в составе MFC, а С-шные и дельфийские классы несовместимы по ран-тайм-структуре


 
Digitman ©   (2005-11-30 09:58) [2]

здесь видится единственное корректное решение - написать на С библиотеку-раппер, которая будет экспортировать одноименную ф-цию с pchar-совместимыми параметрами и будет являться посредником между дельфийским модулем и оригинальной С-шной библиотекой, использующей MFC


 
leonidus ©   (2005-11-30 11:00) [3]

т.е. если я напишу

function LWNewRecord(NameFile, szWord, szTransc, szTransl:string):integer; external "lwdb.dll";

то это не покатит?


 
leonidus ©   (2005-11-30 11:03) [4]

Ок, я могу попросить разработчика поменять тип переменных на аналог string в Delphi, после этого как мне вызвать эту процедуру, я просто с dll никогда не работал?


 
wal ©   (2005-11-30 11:17) [5]

В Си нету "аналога string в Delphi"


 
leonidus ©   (2005-11-30 11:32) [6]

>В Си нету "аналога string в Delphi"

ну текстовые строки то есть, наверняка можно что-то придумать?


 
wal ©   (2005-11-30 11:36) [7]

PChar


 
Sumor   (2005-11-30 21:36) [8]

Во-первых используй для передачи PChar.
Во-вторых не забудь в описании функции написать cdecl (если функция на С++ без WINAPI и других подобных префиксов)
function LWNewRecord(NameFile, szWord, szTransc, szTransl:string):integer; cdecl;external "lwdb.dll";
И третье, по умолчанию компилятор студии добавляет к названию функции дополнительные символы. Чтобы этого избежать должен в проекте DLL быть def-файл с теми названиями функции, которое ты будешь использовать



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.018 c
1-1133354855
Olsher
2005-11-30 15:47
2005.12.25
Как выполнить действие после того, как окно изм. размеры?


3-1130948627
ali_tash
2005-11-02 19:23
2005.12.25
Как закрывать пройденные записи в OracleDataSet


4-1130397713
saf22
2005-10-27 11:21
2005.12.25
Формат даты. Программное изменение.


14-1133349455
Post
2005-11-30 14:17
2005.12.25
Framework SDK


14-1133526001
nk
2005-12-02 15:20
2005.12.25
В продолжение "Помогите выбрать сотку"...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский