Ah, danke für die Erläuterungen!
Ich habs jetzt so geplant:
PB Dll:
Code: Alles auswählen
ProcedureDLL dll2(*ptr)
MessageRequester("pb MessageRequester", PeekS(*ptr))
EndProcedure
D Programm, welches die DLL verwendet:
Code: Alles auswählen
import tango.stdc.stringz;
extern (C) void dll2(char* str);
void main() {
dll2(toStringz("Hallo von D"));
}
Funktioniert prächtig.
Ein Problem hab ich nur noch:
Wenn ich das D Programm dann aufrufe erscheint wie gewüncht der Requester mit dem übergebenen "Hallo von D".
Aber nach Beendigung des Programmes kommt noch ein
object.Exception: Access Violation, welches sicher von der D Seite daherkommt.
Das lustige daran ist aber, wenn ich
dll2(toStringz("Hallo von D")); 2x aufrufe kommt diese Fehlermeldung nicht mehr.
Vermutlich mache ich da was auf der D Seite falsch - mit Pointern und so Kram bin ich sehr unbeholfen, und zumal ich so oder so relativ selten grössere Programme schreibe und deshalb alles schön simpel halten kann.
Falls man mit D eine PB Dll verwenden will muss man noch folgendes machen:
1. Compilieren der DLL in pb
2. die lib file die pb generiert NICHT verwenden
3. eine eigene lib file für d machen:
implib /s pbdll.lib pbdll.dll
4. D Programm wie oben
5. compilieren mit dmd main.d pbdll.lib
Wobei mit den Pointern auf Speicher usw, das hab ich in C schon nicht kapiert und verwende ich normalerweise auch nicht, deshalb könnte das falsch sein *g*
EDIT: Ich habe den Threadtitel jetzt angepasst, damit man besser weiss worum es eigentlich geht.