Jeg har lavet en DLL fil med en række forskellige funktioner.
Når jeg prøver at kalde en bestemt en siger den: "Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter'"
... hvad gør jeg galt?
Jeg tror ikke at du har fået eksporteret din funktion korrekt. Nedenstående kode er testet og virkede hos mig:
library DLL;
uses
ShareMem,
SysUtils,
Classes,
Windows;
{$R *.res}
function SysTempPath: string; stdcall;
var
buffer: array[0..1023] of char;
begin
SetString(Result, Buffer, GetTempPath(Sizeof(Buffer) - 1, Buffer));
end;
exports SysTempPath;
end.
unit fProject;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TProjectForm = class(TForm)
Button: TButton;
procedure ButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ProjectForm: TProjectForm;
function SysTempPath: string; stdcall; external 'DLL.dll'
implementation
{$R *.dfm}
procedure TProjectForm.ButtonClick(Sender: TObject);
begin
ShowMessage(
SysTempPath
);
end;
end.
Husk at tilføje ShareMem til Applikationens uses-clause (Project -> View Source):
program Project;
uses
ShareMem,
Forms,
fProject in 'fProject.pas' {ProjectForm};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TProjectForm, ProjectForm);
Application.Run;
end.
/MHA
[Redigeret d. 13/01-04 23:35:37 af MHA]