mtapi.dll помогите господа Delphi. net - чики.

 
Уважаемые дамы и господа пишу на .net, возникла проблема вот собственно код:


unit WebForm1;

interface

uses
System.Collections, System.ComponentModel, WinTypes,windows,system.Net,
System.Data, System.Drawing, System.Web, System.Web.SessionState,
System.Web.UI, System.Web.UI.WebControls, System.Web.UI.HtmlControls,
Borland.Data.Web;



type
TMtCreate = function (): integer; cdecl;
TMtSetWorkingDirectory = function (const path:string): integer; cdecl;


TMTApi = class(System.Object)
protected
private
hlib: HWND;
MtCreate: TMtCreate;
MtSetWorkingDirectory: TMtSetWorkingDirectory;
var err : integer;
procedure initLib;

public
WM_MetaTraderAPIPumpingMessage: cardinal;
constructor Create;
destructor Destroy; override;
function SetWorkingDirectory(path:string):integer;
function CreateSocket:integer;
end;

TWebForm1 = class(System.Web.UI.Page)
{$REGION 'Designer Managed Code'}
strict private
procedure InitializeComponent;
procedure TextBox2_TextChanged(sender: System.Object; e: System.EventArgs);
procedure Button1_Click(sender: System.Object; e: System.EventArgs);
{$ENDREGION}
strict private
procedure Page_Load(sender: System.Object; e: System.EventArgs);
strict protected
TextBox2: System.Web.UI.WebControls.TextBox;
Button1: System.Web.UI.WebControls.Button;
Label1: System.Web.UI.WebControls.Label;
procedure OnInit(e: EventArgs); override;
private
{ Private Declarations }
public
{ Public Declarations }
end;

implementation

var f: TMTApi;


{$REGION 'Designer Managed Code'}
/// <summary>
/// Required method for Designer support -- do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure TWebForm1.InitializeComponent;
begin
Include(Self.TextBox2.TextChanged, Self.TextBox2_TextChanged);
Include(Self.Button1.Click, Self.Button1_Click);
Include(Self.Load, Self.Page_Load);
end;
{$ENDREGION}

procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
begin
// TODO: Put user code to initialize the page here
end;

procedure TWebForm1.OnInit(e: EventArgs);
begin
//
// Required for Designer support
//
InitializeComponent;
inherited OnInit(e);
end;

destructor TMTApi.Destroy;
begin
FreeLibrary(hLib);
inherited Destroy;
end;


procedure TMTApi.initLib;


begin

// WM_MetaTraderAPIPumpingMessage := RegisterWindowMessage('MetaTraderAPI_Pumping_Message');
hLib:=LoadLibrary('C:\Inetpub\wwwroot\myproject\mtapi.dll');
@MtCreate:=Pointer(GetProcAddress(hLib,'MtCreate'));
(* if assigned(MtCreate)=false then
begin
err:=GetLastError();
end; *)

@MtSetWorkingDirectory:=(GetProcAddress(hLib,'MtSetWorkingDirectory')).ToPointer;
end;

function TMTApi.SetWorkingDirectory(path:string):integer;
begin
result:=convert.toInt32(MtSetWorkingDirectory(path));
end;

constructor TMTApi.Create;
begin
inherited create;
end;

function TMTApi.CreateSocket:integer;


begin
Result:=MtCreate;

end;



procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
f:=TMTApi.Create;
f.initLib;


//f.MtCreate.toString;
label1.Text := f.MtCreate.toString;
end;

procedure TWebForm1.TextBox2_TextChanged(sender: System.Object; e: System.EventArgs);
begin

end;

end.



При дебурге библиотека подгружается и получаем в TMTApi.hlib 268435456 а вот когда дебажим дальше то MtCreate = null reference. Голову уже сломал, почему так? Совсем недавно начал прографить на .net помогите, кто знает, в чем дело? Причем далее возникает сообщение
Server Error in '/myproject' Application.
--------------------------------------------------------------------------------

Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Line 136:
Line 137://f.MtCreate.toString;
Line 138:label1.Text := f.MtCreate.toString;
Line 139:end;
Line 140:


Source File: C:\Inetpub\wwwroot\myproject\WebForm1.pas Line: 138

Stack Trace:


[NullReferenceException: Object reference not set to an instance of an object.]
WebForm1.TMtCreate.Invoke() +0
WebForm1.TWebForm1.Button1_Click(Object sender, EventArgs e) in C:\Inetpub\wwwroot\myproject\WebForm1. pas:138
System.Web.UI.WebControls.Button.OnClick(EventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()

Помогите если не сложно. Спасибо...
 
Ребят если кто знает, пришлите пример обращения к mtapi.dll только на Delphi.net ... спасибо
 
mbkeker писал (а):
Ребят если кто знает, пришлите пример обращения к mtapi.dll только на Delphi.net ... спасибо
На этом форуме тебе вряд ли смогут помочь. Другой профиль. Лучше обратиться на специализированные на Delphi форумы. Они через поисковики легко обнаружатся.
 
Спасибо конечно, я и там оставлял, но пока ничего... даже знаю где ошибка, но не могу решить эту проблему

чистая логика:

GetProcAddress возвращает IntPtr, а @MtCreate нужен тип Pointer но фишка в том что этот тип( IntPtr) не возвращает указатель и че делать не знаю.
Я в тупике.

@MtCreate:= Pointer(GetProcAddress(HLib, 'MtCreate'));

вот такая вот беда.
 
mbkeker писал (а):
Спасибо конечно, я и там оставлял, но пока ничего... даже знаю где ошибка, но не могу решить эту проблему

чистая логика:

GetProcAddress возвращает IntPtr, а @MtCreate нужен тип Pointer но фишка в том что этот тип( IntPtr) не возвращает указатель и че делать не знаю.
Я в тупике.

@MtCreate:= Pointer(GetProcAddress(HLib, 'MtCreate'));

вот такая вот беда.

Я с Delphi особо много не работал. Советую С++. Хотя бы С++Builder - он как Delphi почти :) Те же компоненты, классы и методы. Но другая работа с указателями, ссылками и вообще С++ гораздо мощнее. Лучше с ним работать.
 
favoritefx писал (а):
mbkeker писал (а):
Спасибо конечно, я и там оставлял, но пока ничего... даже знаю где ошибка, но не могу решить эту проблему

чистая логика:

GetProcAddress возвращает IntPtr, а @MtCreate нужен тип Pointer но фишка в том что этот тип( IntPtr) не возвращает указатель и че делать не знаю.
Я в тупике.

@MtCreate:= Pointer(GetProcAddress(HLib, 'MtCreate'));

вот такая вот беда.

Я с Delphi особо много не работал. Советую С++. Хотя бы С++Builder - он как Delphi почти :) Те же компоненты, классы и методы. Но другая работа с указателями, ссылками и вообще С++ гораздо мощнее. Лучше с ним работать.
Спасибо дружище разобрался в чем ошибка...
 
mtapi.dll - он для МТ3. На МТ4 не едет.
Причина обращения: