Einzelnen Beitrag anzeigen

Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Daten von C nach PAS und PAS nach C ...

  Alt 31. Jul 2024, 12:33
Hallo Thomas,
ja, das stimmt.
Speicher(variablen) wird solange gehalten bis sie nicht mehr genutzt werden.
Es gibt zwei Arten, wie Variablen gehalten werden:

Heap => innerhalb einer Prozedur/Funktion gültig (lokaler Scope), und:
Stack => überlebt, wenn die Prozedur/Funktion verlassen wird.

Das mit den Array war ja auch so in meine Richtung...
Eine in C++ verwendete std::map< std::string, void* > Insntanzen;

Dann braucht man nur noch in etwa sowas machen: instanzen["foo"] = 0xcafebabe;
und die map im globalen Scope belassen, dann überleben die Pointer.

Aber ich habe gerade ein anderes Problem:

hier verwende ich einen Delphi-PChar:
Delphi-Quellcode:
{$APPTYPE CONSOLE}
program Project1;

uses Windows;

type
  TMyFunction = procedure(s: PChar); cdecl;

var
  DLLHandle: HMODULE;
  MyFunction: TMyFunction;

begin
  DLLHandle := LoadLibrary('foo.dll');
  if DLLHandle = 0 then
  begin
    MessageBox(0,'Error: DLL could not be loaded.','Error',0);
    ExitProcess(1);
  end;
  try
    @MyFunction := GetProcAddress(DLLHandle, 'TestFunction');
    if @MyFunction = nil then
    begin
      MessageBox(0, 'Error: TestFunction not found in DLL.', 'Error', 0);
      ExitProcess(1);
    end;
    MyFunction(PChar('jukel'));
  finally
      FreeLibrary(DLLHandle);
      ExitProcess(0);
  end;
end.
und hier nur einen 0-terminierten C char *:

Code:
#include <windows.h>
#include <iostream>

#ifdef _WIN64
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT
#endif

extern "C" {
DLL_EXPORT void TestFunction(char* func) {
    std::cout << "Func: " << func << std::endl;
}
};
beide Image-Dateien sind im 64-Modus kompiliert.
Aber ich erhalte als Ergebnis (auf der Konsole):

Func: j
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat