Jak zaimportować tablicę z .dll

0

Poszukuje rozwiązania tego typu

library dll_tab;

uses
  SysUtils,
  Classes;

var
  Tablica_stringow : array[1..10] of string;
{$R *.RES}

{$E DLL}
procedure Tablica( index : integer; var odpowiedz : string ); stdcall;
begin
  odpowiedz:=Tablica_stringow[index];
end;

exports
 Tablica; 
// tu jest jakis problem  
begin
 Tablica_stringow[1]:=' To jest pierwszy ciág tablicy.';
 Tablica_stringow[2]:=' To jest drogi ciág tablicy.';
 Tablica_stringow[3]:=' To jest trzeci ciág tablicy.';
 Tablica_stringow[4]:=' To jest czwarty ciág tablicy.';
 Tablica_stringow[5]:=' To jest piaty ciág tablicy.';
 Tablica_stringow[6]:=' To jest szusty ciág tablicy.';
 Tablica_stringow[7]:=' To jest siodmy ciág tablicy.';
 Tablica_stringow[8]:=' To jest osmy ciág tablicy.';
 Tablica_stringow[9]:=' To jest dziewiaty ciág tablicy.';
 Tablica_stringow[10]:=' To jest dziesiaty ciág tablicy.';
end.

tego typu rozwiązania poszukuję. Gdzie tu jest błąd bo nie można tej wersji skompilować

4

jak zaczynasz od przekazywania stringów do/z dlla to już jesteś w czarnej dupie. I oczywiście przeczytałeś komentarz z nowo utworzonego dlla zanim go wywaliłeś

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

BTW u mnie się kompiluje

2

Ci co czytają i stosują się do zaleceń nie muszą pisać na tym forum :D

2
dluzszy napisał(a):

Gdzie tu jest błąd bo nie można tej wersji skompilować

Cóż za głębia podania błędu.
Od razu widać 16 laty skill'u (Ops! Sorry, zapomnaiłęm że w tym dziale skill sie liczy na odwrót)

Adamek Adam napisał(a):

Ci co czytają i stosują się do zaleceń nie muszą pisać na tym forum :D

Czytający komunikaty też :)

0

masz tu tłumaczenie googlem

Ważna uwaga dotycząca zarządzania pamięcią DLL: ShareMem musi być
pierwsza jednostka w klauzuli USES twojej biblioteki ORAZ twojego projektu (select
Project-View Source) klauzula USES, jeśli biblioteka DLL eksportuje jakiekolwiek procedury lub
funkcje, które przekazują ciągi znaków jako parametry lub wyniki funkcji. Ten
dotyczy wszystkich łańcuchów przekazywanych do iz twojej biblioteki DLL - nawet tych, które
są zagnieżdżone w rekordach i klasach. ShareMem to jednostka interfejsu
menedżera pamięci współdzielonej BORLNDMM.DLL, który musi zostać wdrożony razem
z twoją biblioteką DLL. Aby uniknąć używania BORLNDMM.DLL, przekaż informacje o ciągu
przy użyciu parametrów PChar lub ShortString.

Natomiast bezpieczniej (można tak przekazywać napisy między bibliotekami/programami napisanymi w różnych językach) jest użyć PWideChar

natomiast co do Gdzie tu jest błąd bo nie można tej wersji skompilować to jest to nie prawda bo ten kod się kompiluje

0
abrakadaber napisał(a):

masz tu tłumaczenie googlem

Ważna uwaga dotycząca zarządzania pamięcią DLL: ShareMem musi być
pierwsza jednostka w klauzuli USES twojej biblioteki ORAZ twojego projektu (select
Project-View Source) klauzula USES, jeśli biblioteka DLL eksportuje jakiekolwiek procedury lub
funkcje, które przekazują ciągi znaków jako parametry lub wyniki funkcji. Ten
dotyczy wszystkich łańcuchów przekazywanych do iz twojej biblioteki DLL - nawet tych, które
są zagnieżdżone w rekordach i klasach. ShareMem to jednostka interfejsu
menedżera pamięci współdzielonej BORLNDMM.DLL, który musi zostać wdrożony razem
z twoją biblioteką DLL. Aby uniknąć używania BORLNDMM.DLL, przekaż informacje o ciągu
przy użyciu parametrów PChar lub ShortString.

Natomiast bezpieczniej (można tak przekazywać napisy między bibliotekami/programami napisanymi w różnych językach) jest użyć PWideChar

natomiast co do Gdzie tu jest błąd bo nie można tej wersji skompilować to jest to nie prawda bo ten kod się kompiluje

Ale u mnie się nie kompiluje podkresla  Tablica_stringow[1]:=' To jest pierwszy ciág tablicy.';

2
dluzszy napisał(a):

Ale u mnie się nie kompiluje podkresla  Tablica_stringow[1]:=' To jest pierwszy ciág tablicy.';

smuteczek - po głowie cię pogłaskać? Ile ty masz lat? 10? Nie potrafisz nic więcej napisać tylko nie działa? Jak jest błąd to wypadało by napisać JAKI TO BŁĄD. To tobie zależy na rozwiązaniu TWOJEGO problemu a nie nam więc się chociaż trochę postaraj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1