Avatar billede yates Nybegynder
16. juni 2006 - 12:05 Der er 3 kommentarer

DLL med char*, skrivning i memory

Hej.

Har problemer med at lave en DLL-funktion der kan ændre i et bogstav ud fra en char pointer.

Blot til simpel illustration:
Jeg har en windows DLL med noget i retning af flg:


int __declspec(dllexport) Foo (char* p)
{
  *p=65; //overskriv med et A
  return(1);
}

Og når jeg giver den en pointer til en streng fra Delphi (pchar), får jeg en access violation.

Ka sgu ikke få det til at virke. Forhindrer deklarationen mig i at skrive i memoryen? Eller hva går galt?

Y.
Avatar billede arne_v Ekspert
16. juni 2006 - 13:03 #1
hvordan ser Delphi kaldet ud ?
Avatar billede yates Nybegynder
16. juni 2006 - 14:26 #2
Det er fx bare

S:= 'Dingeling';
P:= pchjar(S)
Z:=Foo(P);

Skal siges at under de givne omstændigheder er det kompileret på kaldet er med cdecl, og dette er specificeret i min deklaration af Foo i Delphi.

Alternativt kan man jo prøve at give Foo en Tmemorystream.memory som pchar - men resultatet bliver det samme!

Y.
Avatar billede yates Nybegynder
16. juni 2006 - 15:26 #3
Arne, Tillægsoplysninger:

Funktionen er fx deklareret noget i retning af

function Foo(P: pchar): integer; cdecl; external 'tjuehj.dll';

Jeg bruger somregel CDECL calling convention, men har også forsøgt at anvende stdcall (kræver ændring i sourcen/kompileringen i C, det ved jeg godt). Men resultatet er det samme.

Nogen ideer??
Y.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester