Hallo Leute!!
Ich Hab da ein problem vieleicht kann mir eine(r) mir da helfen. Die Dll lädt ohne problem, aber
FreeLibrary(Handle) führt zu ein zugriffs verletzung. Wenn ich FreeLibrary weg las kommt die zugriffs verletzung beim schließen des progs.
Hier ist das code vom Haupt prog:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); var Handle: THandle; D4: TProc; begin Handle := LoadLibrary('.\Lib\dice.dll'); if Handle = 0 then begin ShowMessage('Dice.dll not found!'); Exit; end; D4 := GetProcAddress(Handle, 'd4'); Edit1.Text := IntToStr(D4); FreeLibrary(Handle); end; |
und der dll-code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| library dice;
uses SysUtils, Classes, ShareMem;
{$R *.res} Function d4(): Byte; begin Randomize; d4 := random(3) + 1; end; Function d6(): Byte; begin Randomize; d6 := random(5) + 1; end; Function d8(): Byte; begin Randomize; d8 := random(7) + 1; end; Function d10(): Byte; begin Randomize; d10 := random(9) + 1; end; Function d12():Byte; begin Randomize; d12 := random(11) + 1; end; Function Attribute(): Byte; var a, b, c: Byte; begin randomize; a := random(5) + 1; b := random(5) + 1; c := random(5) + 1; Attribute := a+b+c; end; Function d20(): Byte; begin Randomize; d20 := random(19) + 1; end; Function percentile(): Byte; begin Randomize; percentile := random(99) + 1; end; Exports d4 index 1 Name 'd4', d6 index 2 Name 'd6', d8 index 3 Name 'd8', d10 index 4 Name 'd10', d12 index 5 Name 'd12', Attribute index 6 Name 'Attibute', d20 index 7 Name 'd20', percentile index 8 Name 'Percentile'; begin end. |
Wäre doch lieb wenn mann mir erklären könnte was ich falsche gemacht habe.
Jeremy
Jede ende hat ne anfang genau wie umgekehrt und windows ist der teurste mull den man kaufen kann!!!