Re[3]: Импорт функций из делфёвой DLL
От: Centaur Россия  
Дата: 26.06.07 21:53
Оценка:
Здравствуйте, Walth, Вы писали:

W>Я конечно виноват, что сразу не сказал, у меня есть DLL сделанный на Делфи, но у меня нет его исходников. Есть также интерфейсный файл для этой DLL тоже написанный на Делфи.


Берётся Delphi той же версии, которой скомпилирована DLL. Пишется DLL-обёртка с правильным C-интерфейсом. Опционально над этой обёрточной DLL пишется ещё C++-обёртка, возвращающая std::string.

Либо делается извратный изврат, основанный на знании внутреннего строения ShortString и того, как он возвращается из Delphi-функций. Например, такой:

#pragma pack(push)
#pragma pack(1)
class ShortString
{
private:
  unsigned char length;
  char characters[256]; // 255 + terminating zero
public:
  const char* c_str() const { characters[length] = 0; return &characters[0]; }
  size_t size() const { return length; }
  char& operator[](size_t i) { return characters[i]; }
  char operator[](size_t i) const { return characters[i]; }
  // вложенные типы и функции контейнеров — begin, end и т. д. по вкусу
};
#pragma pack(pop)

typedef void (__stdcall *pfErrorMsg)(int ErrNo, ShortString* Result);

[…]

void use(const char*);

pfErrorMsg clErrorMsg = …;
ShortString ss;
(*clErrorMsg)(42, &ss);
use(ss.c_str());
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.