GetProcAddress проблем в Delphi.NET 2006
0 отговора
0 прегледа
GetProcAddress проблем в Delphi.NET 2006
Здравейте имам следния проблем:
Написал съм си една DLL библиотека със съответен интерфейс в нея и клас, който имплементира този интерфейс. В библиотеката има една експортируема функция, която създава обект от класа. Дотук всичко хубаво.
Проблема идва обаче с зареждането на библиотеката и викането на тази функция.
Сорса е следния:
interface
uses
System.Drawing, System.Collections, System.ComponentModel,
System.Windows.Forms, System.Data, Dialogs,
uLog_Lib_Interface, Windows;
type
prcCreateLog = function : ILog_Lib;
type
TfrmLogin = class(System.Windows.Forms.Form)
{$REGION 'Designer Managed Code'}
strict private
/// <summary>
/// Required designer variable.
/// </summary>
Components: System.ComponentModel.Container;
Label1: System.Windows.Forms.Label;
eUsername: System.Windows.Forms.TextBox;
Label2: System.Windows.Forms.Label;
ePassword: System.Windows.Forms.TextBox;
btnOK: System.Windows.Forms.Button;
btnCancel: System.Windows.Forms.Button;
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure InitializeComponent;
procedure btnOK_Click(sender: System.Object; e: System.EventArgs);
{$ENDREGION}
strict protected
/// <summary>
/// Clean up any resources being used.
/// </summary>
procedure Dispose(Disposing: Boolean); override;
private
{ Private Declarations }
public
constructor Create;
function Visualize : DialogResult;
end;
procedure TfrmLogin.btnOK_Click(sender: System.Object; e: System.EventArgs);
var
prc : prcCreateLog;
hDLL : THandle;
objLog : ILog_Lib;
begin
hDLL := LoadLibrary('Log_Lib.dll');
@prc := GetProcAddress(hDLL,'Log_Lib.dll');
objLog := prc;
end;
Проблема е че в реда с GetProcAddress ми дава грешка:
E2010 "Incompatible types Pointer and IntPtr"
понеже GetProcAddress връщал резултат от тип IntPtr.
Интересното е. че горното си работи в Delphi 6, но в Delphi.NET 2006 не иска.
Моля, нека ако някой се е сблъсквал с този проблем или знае как да се реши да каже.
Благодаря предварително.
Написал съм си една DLL библиотека със съответен интерфейс в нея и клас, който имплементира този интерфейс. В библиотеката има една експортируема функция, която създава обект от класа. Дотук всичко хубаво.
Проблема идва обаче с зареждането на библиотеката и викането на тази функция.
Сорса е следния:
interface
uses
System.Drawing, System.Collections, System.ComponentModel,
System.Windows.Forms, System.Data, Dialogs,
uLog_Lib_Interface, Windows;
type
prcCreateLog = function : ILog_Lib;
type
TfrmLogin = class(System.Windows.Forms.Form)
{$REGION 'Designer Managed Code'}
strict private
/// <summary>
/// Required designer variable.
/// </summary>
Components: System.ComponentModel.Container;
Label1: System.Windows.Forms.Label;
eUsername: System.Windows.Forms.TextBox;
Label2: System.Windows.Forms.Label;
ePassword: System.Windows.Forms.TextBox;
btnOK: System.Windows.Forms.Button;
btnCancel: System.Windows.Forms.Button;
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure InitializeComponent;
procedure btnOK_Click(sender: System.Object; e: System.EventArgs);
{$ENDREGION}
strict protected
/// <summary>
/// Clean up any resources being used.
/// </summary>
procedure Dispose(Disposing: Boolean); override;
private
{ Private Declarations }
public
constructor Create;
function Visualize : DialogResult;
end;
procedure TfrmLogin.btnOK_Click(sender: System.Object; e: System.EventArgs);
var
prc : prcCreateLog;
hDLL : THandle;
objLog : ILog_Lib;
begin
hDLL := LoadLibrary('Log_Lib.dll');
@prc := GetProcAddress(hDLL,'Log_Lib.dll');
objLog := prc;
end;
Проблема е че в реда с GetProcAddress ми дава грешка:
E2010 "Incompatible types Pointer and IntPtr"
понеже GetProcAddress връщал резултат от тип IntPtr.
Интересното е. че горното си работи в Delphi 6, но в Delphi.NET 2006 не иска.
Моля, нека ако някой се е сблъсквал с този проблем или знае как да се реши да каже.
Благодаря предварително.