Help with DLL development

Hello all!

I need to develop my own DLL with which has function to execute some SQL query.

Help me please!

Thank You

Comments

  • : Hello all!
    :
    : I need to develop my own DLL with which has function to execute some
    : SQL query.
    :
    : Help me please!
    :
    : Thank You
    :
    Writing a DLL is very simple:
    1 Start a new DLL project
    2 Write a function or procedure to perform your SQL query
    3 Write the exports clause to export the function

    Simple example:
    [code]
    library MyDLL;

    function SumIntegers(x, y: integer): integer; StdCall;
    begin
    Result := x + y;
    end;

    exports
    SumIntegers;

    end.
    [/code]

    To import the DLL, make a standard project and add this line:
    [code]
    function SumIntegers(x, y: integer): integer; StdCall; external 'MyDLL';
    [/code]
    Now you can use SumIntegers() to add 2 integers together.
  • : : Hello all!
    : :
    : : I need to develop my own DLL with which has function to execute some
    : : SQL query.
    : :
    : : Help me please!
    : :
    : : Thank You
    : :
    : Writing a DLL is very simple:
    : 1 Start a new DLL project
    : 2 Write a function or procedure to perform your SQL query
    : 3 Write the exports clause to export the function
    :
    : Simple example:
    : [code]:
    : library MyDLL;
    :
    : function SumIntegers(x, y: integer): integer; StdCall;
    : begin
    : Result := x + y;
    : end;
    :
    : exports
    : SumIntegers;
    :
    : end.
    : [/code]:
    :
    : To import the DLL, make a standard project and add this line:
    : [code]:
    : function SumIntegers(x, y: integer): integer; StdCall; external 'MyDLL';
    : [/code]:
    : Now you can use SumIntegers() to add 2 integers together.




    OK, can You please find an error in my DLL:

    library mydll;
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ADODB, DB, StdCtrls;
    var
    ADOConnection1: TADOConnection;
    ADOCommand1: TADOCommand;
    {$R *.res}
    procedure MySQL(); stdcall;
    begin
    ADOConnection1.connectionstring:= 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=fx;Data Source=it_ld_big';
    ADOCommand1.Connection:=ADOConnection1;
    ADOCommand1.CommandText:='UPDATE Brokers SET spread = ''33''';
    ADOConnection1.openl
    ADOCommand1.execute;
    end;
    exports MySQL;
    begin
    end.



  • : : : Hello all!
    : : :
    : : : I need to develop my own DLL with which has function to execute some
    : : : SQL query.
    : : :
    : : : Help me please!
    : : :
    : : : Thank You
    : : :
    : : Writing a DLL is very simple:
    : : 1 Start a new DLL project
    : : 2 Write a function or procedure to perform your SQL query
    : : 3 Write the exports clause to export the function
    : :
    : : Simple example:
    : : [code]: :
    : : library MyDLL;
    : :
    : : function SumIntegers(x, y: integer): integer; StdCall;
    : : begin
    : : Result := x + y;
    : : end;
    : :
    : : exports
    : : SumIntegers;
    : :
    : : end.
    : : [/code]: :
    : :
    : : To import the DLL, make a standard project and add this line:
    : : [code]: :
    : : function SumIntegers(x, y: integer): integer; StdCall; external 'MyDLL';
    : : [/code]: :
    : : Now you can use SumIntegers() to add 2 integers together.
    :
    :
    :
    :
    : OK, can You please find an error in my DLL:
    :
    : library mydll;
    : uses
    : Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
    : Forms,
    : Dialogs, ADODB, DB, StdCtrls;
    : var
    : ADOConnection1: TADOConnection;
    : ADOCommand1: TADOCommand;
    : {$R *.res}
    : procedure MySQL(); stdcall;
    : begin
    : ADOConnection1.connectionstring:= 'Provider=SQLOLEDB.1;Integrated
    : Security=SSPI;Persist Security Info=False;Initial Catalog=fx;Data
    : Source=it_ld_big';
    : ADOCommand1.Connection:=ADOConnection1;
    : ADOCommand1.CommandText:='UPDATE Brokers SET spread = ''33''';
    : ADOConnection1.openl
    : ADOCommand1.execute;
    : end;
    : exports MySQL;
    : begin
    : end.
    :
    :
    There are several errors:
    - ADOConnect1 is never instantiated.
    - ADOCommand1 is never instantiated.
    - Several basic Delphi syntax errors: Will be shown by compiler.
  • : : : : Hello all!
    : : : :
    : : : : I need to develop my own DLL with which has function to execute some
    : : : : SQL query.
    : : : :
    : : : : Help me please!
    : : : :
    : : : : Thank You
    : : : :
    : : : Writing a DLL is very simple:
    : : : 1 Start a new DLL project
    : : : 2 Write a function or procedure to perform your SQL query
    : : : 3 Write the exports clause to export the function
    : : :
    : : : Simple example:
    : : : [code]: : :
    : : : library MyDLL;
    : : :
    : : : function SumIntegers(x, y: integer): integer; StdCall;
    : : : begin
    : : : Result := x + y;
    : : : end;
    : : :
    : : : exports
    : : : SumIntegers;
    : : :
    : : : end.
    : : : [/code]: : :
    : : :
    : : : To import the DLL, make a standard project and add this line:
    : : : [code]: : :
    : : : function SumIntegers(x, y: integer): integer; StdCall; external 'MyDLL';
    : : : [/code]: : :
    : : : Now you can use SumIntegers() to add 2 integers together.
    : :
    : :
    : :
    : :
    : : OK, can You please find an error in my DLL:
    : :
    : : library mydll;
    : : uses
    : : Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
    : : Forms,
    : : Dialogs, ADODB, DB, StdCtrls;
    : : var
    : : ADOConnection1: TADOConnection;
    : : ADOCommand1: TADOCommand;
    : : {$R *.res}
    : : procedure MySQL(); stdcall;
    : : begin
    : : ADOConnection1.connectionstring:= 'Provider=SQLOLEDB.1;Integrated
    : : Security=SSPI;Persist Security Info=False;Initial Catalog=fx;Data
    : : Source=it_ld_big';
    : : ADOCommand1.Connection:=ADOConnection1;
    : : ADOCommand1.CommandText:='UPDATE Brokers SET spread = ''33''';
    : : ADOConnection1.openl
    : : ADOCommand1.execute;
    : : end;
    : : exports MySQL;
    : : begin
    : : end.
    : :
    : :
    : There are several errors:
    : - ADOConnect1 is never instantiated.
    : - ADOCommand1 is never instantiated.
    : - Several basic Delphi syntax errors: Will be shown by compiler.



    Can You please correct my errors?
    Be so kind, Im not so educated in Delphi
  • : : : : : Hello all!
    : : : : :
    : : : : : I need to develop my own DLL with which has function to execute some
    : : : : : SQL query.
    : : : : :
    : : : : : Help me please!
    : : : : :
    : : : : : Thank You
    : : : : :
    : : : : Writing a DLL is very simple:
    : : : : 1 Start a new DLL project
    : : : : 2 Write a function or procedure to perform your SQL query
    : : : : 3 Write the exports clause to export the function
    : : : :
    : : : : Simple example:
    : : : : [code]: : : :
    : : : : library MyDLL;
    : : : :
    : : : : function SumIntegers(x, y: integer): integer; StdCall;
    : : : : begin
    : : : : Result := x + y;
    : : : : end;
    : : : :
    : : : : exports
    : : : : SumIntegers;
    : : : :
    : : : : end.
    : : : : [/code]: : : :
    : : : :
    : : : : To import the DLL, make a standard project and add this line:
    : : : : [code]: : : :
    : : : : function SumIntegers(x, y: integer): integer; StdCall; external 'MyDLL';
    : : : : [/code]: : : :
    : : : : Now you can use SumIntegers() to add 2 integers together.
    : : :
    : : :
    : : :
    : : :
    : : : OK, can You please find an error in my DLL:
    : : :
    : : : library mydll;
    : : : uses
    : : : Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
    : : : Forms,
    : : : Dialogs, ADODB, DB, StdCtrls;
    : : : var
    : : : ADOConnection1: TADOConnection;
    : : : ADOCommand1: TADOCommand;
    : : : {$R *.res}
    : : : procedure MySQL(); stdcall;
    : : : begin
    : : : ADOConnection1.connectionstring:= 'Provider=SQLOLEDB.1;Integrated
    : : : Security=SSPI;Persist Security Info=False;Initial Catalog=fx;Data
    : : : Source=it_ld_big';
    : : : ADOCommand1.Connection:=ADOConnection1;
    : : : ADOCommand1.CommandText:='UPDATE Brokers SET spread = ''33''';
    : : : ADOConnection1.openl
    : : : ADOCommand1.execute;
    : : : end;
    : : : exports MySQL;
    : : : begin
    : : : end.
    : : :
    : : :
    : : There are several errors:
    : : - ADOConnect1 is never instantiated.
    : : - ADOCommand1 is never instantiated.
    : : - Several basic Delphi syntax errors: Will be shown by compiler.
    :
    :
    :
    : Can You please correct my errors?
    : Be so kind, Im not so educated in Delphi
    :
    The instantiation of objects is done in this manner:
    [code]
    ObjectVariable := ObjectType.Create(Possible parameters);
    [/code]
    Thus for the ADOConnect1 the instantiation becomes:
    [code]
    ADOConnect1 := TADOConnection.Create(Necessary Parameters);
    [/code]
    I don't have Dlephi here, so I don't know which parameters the TADOConnection.Create() constructor needs. The help files list those.
  • : : : : : : Hello all!
    : : : : : :
    : : : : : : I need to develop my own DLL with which has function to execute some
    : : : : : : SQL query.
    : : : : : :
    : : : : : : Help me please!
    : : : : : :
    : : : : : : Thank You
    : : : : : :
    : : : : : Writing a DLL is very simple:
    : : : : : 1 Start a new DLL project
    : : : : : 2 Write a function or procedure to perform your SQL query
    : : : : : 3 Write the exports clause to export the function
    : : : : :
    : : : : : Simple example:
    : : : : : [code]: : : : :
    : : : : : library MyDLL;
    : : : : :
    : : : : : function SumIntegers(x, y: integer): integer; StdCall;
    : : : : : begin
    : : : : : Result := x + y;
    : : : : : end;
    : : : : :
    : : : : : exports
    : : : : : SumIntegers;
    : : : : :
    : : : : : end.
    : : : : : [/code]: : : : :
    : : : : :
    : : : : : To import the DLL, make a standard project and add this line:
    : : : : : [code]: : : : :
    : : : : : function SumIntegers(x, y: integer): integer; StdCall; external 'MyDLL';
    : : : : : [/code]: : : : :
    : : : : : Now you can use SumIntegers() to add 2 integers together.
    : : : :
    : : : :
    : : : :
    : : : :
    : : : : OK, can You please find an error in my DLL:
    : : : :
    : : : : library mydll;
    : : : : uses
    : : : : Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
    : : : : Forms,
    : : : : Dialogs, ADODB, DB, StdCtrls;
    : : : : var
    : : : : ADOConnection1: TADOConnection;
    : : : : ADOCommand1: TADOCommand;
    : : : : {$R *.res}
    : : : : procedure MySQL(); stdcall;
    : : : : begin
    : : : : ADOConnection1.connectionstring:= 'Provider=SQLOLEDB.1;Integrated
    : : : : Security=SSPI;Persist Security Info=False;Initial Catalog=fx;Data
    : : : : Source=it_ld_big';
    : : : : ADOCommand1.Connection:=ADOConnection1;
    : : : : ADOCommand1.CommandText:='UPDATE Brokers SET spread = ''33''';
    : : : : ADOConnection1.openl
    : : : : ADOCommand1.execute;
    : : : : end;
    : : : : exports MySQL;
    : : : : begin
    : : : : end.
    : : : :
    : : : :
    : : : There are several errors:
    : : : - ADOConnect1 is never instantiated.
    : : : - ADOCommand1 is never instantiated.
    : : : - Several basic Delphi syntax errors: Will be shown by compiler.
    : :
    : :
    : :
    : : Can You please correct my errors?
    : : Be so kind, Im not so educated in Delphi
    : :
    : The instantiation of objects is done in this manner:
    : [code]:
    : ObjectVariable := ObjectType.Create(Possible parameters);
    : [/code]:
    : Thus for the ADOConnect1 the instantiation becomes:
    : [code]:
    : ADOConnect1 := TADOConnection.Create(Necessary Parameters);
    : [/code]:
    : I don't have Dlephi here, so I don't know which parameters the
    : TADOConnection.Create() constructor needs. The help files list those.



    TADOConnection.Create(AOwner:Tcomponent)

    Where shoul I place this inicialization?
    What shoul I write in AOwner:TComponent?

    Thanx


  • : : : : : : : Hello all!
    : : : : : : :
    : : : : : : : I need to develop my own DLL with which has function to execute some
    : : : : : : : SQL query.
    : : : : : : :
    : : : : : : : Help me please!
    : : : : : : :
    : : : : : : : Thank You
    : : : : : : :
    : : : : : : Writing a DLL is very simple:
    : : : : : : 1 Start a new DLL project
    : : : : : : 2 Write a function or procedure to perform your SQL query
    : : : : : : 3 Write the exports clause to export the function
    : : : : : :
    : : : : : : Simple example:
    : : : : : : [code]: : : : : :
    : : : : : : library MyDLL;
    : : : : : :
    : : : : : : function SumIntegers(x, y: integer): integer; StdCall;
    : : : : : : begin
    : : : : : : Result := x + y;
    : : : : : : end;
    : : : : : :
    : : : : : : exports
    : : : : : : SumIntegers;
    : : : : : :
    : : : : : : end.
    : : : : : : [/code]: : : : : :
    : : : : : :
    : : : : : : To import the DLL, make a standard project and add this line:
    : : : : : : [code]: : : : : :
    : : : : : : function SumIntegers(x, y: integer): integer; StdCall; external 'MyDLL';
    : : : : : : [/code]: : : : : :
    : : : : : : Now you can use SumIntegers() to add 2 integers together.
    : : : : :
    : : : : :
    : : : : :
    : : : : :
    : : : : : OK, can You please find an error in my DLL:
    : : : : :
    : : : : : library mydll;
    : : : : : uses
    : : : : : Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
    : : : : : Forms,
    : : : : : Dialogs, ADODB, DB, StdCtrls;
    : : : : : var
    : : : : : ADOConnection1: TADOConnection;
    : : : : : ADOCommand1: TADOCommand;
    : : : : : {$R *.res}
    : : : : : procedure MySQL(); stdcall;
    : : : : : begin
    : : : : : ADOConnection1.connectionstring:= 'Provider=SQLOLEDB.1;Integrated
    : : : : : Security=SSPI;Persist Security Info=False;Initial Catalog=fx;Data
    : : : : : Source=it_ld_big';
    : : : : : ADOCommand1.Connection:=ADOConnection1;
    : : : : : ADOCommand1.CommandText:='UPDATE Brokers SET spread = ''33''';
    : : : : : ADOConnection1.openl
    : : : : : ADOCommand1.execute;
    : : : : : end;
    : : : : : exports MySQL;
    : : : : : begin
    : : : : : end.
    : : : : :
    : : : : :
    : : : : There are several errors:
    : : : : - ADOConnect1 is never instantiated.
    : : : : - ADOCommand1 is never instantiated.
    : : : : - Several basic Delphi syntax errors: Will be shown by compiler.
    : : :
    : : :
    : : :
    : : : Can You please correct my errors?
    : : : Be so kind, Im not so educated in Delphi
    : : :
    : : The instantiation of objects is done in this manner:
    : : [code]: :
    : : ObjectVariable := ObjectType.Create(Possible parameters);
    : : [/code]: :
    : : Thus for the ADOConnect1 the instantiation becomes:
    : : [code]: :
    : : ADOConnect1 := TADOConnection.Create(Necessary Parameters);
    : : [/code]: :
    : : I don't have Dlephi here, so I don't know which parameters the
    : : TADOConnection.Create() constructor needs. The help files list those.
    :
    :
    :
    : TADOConnection.Create(AOwner:Tcomponent)
    :
    : Where shoul I place this inicialization?
    : What shoul I write in AOwner:TComponent?
    :
    : Thanx
    :
    :
    :
    All methods are like normal procedures/functions. The rules for procedure parameters apply to them as well. In this case AOwner can be [b]nil[/b], because there's no form, which owns the components. If an object doesn't have an owner, don't forget to free it using the Free() method.
    Instantiation must become before using the object, or its properties/methods. Since it is runnable code, it must be within the body of a function or procedure.
  • So, it is ok now?

    library mydll;
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ADODB, DB, StdCtrls;
    var
    ADOConnection1: TADOConnection;
    ADOCommand1: TADOCommand;
    {$R *.res}
    procedure GetSimpleText(); stdcall;
    begin
    ShowMessage('Hello');
    ADOConnection1 := TADOConnection.Create(nil);
    ADOCommand1:= TADOCommand.Create(nil);
    ADOConnection1.Open;
    ADOConnection1.connectionstring:= 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=fx;Data Source=it_ld_big';
    ADOCommand1.Connection:=ADOConnection1;
    ADOCommand1.CommandText:='UPDATE Brokers SET spread = ''33''';
    ADOConnection1.Close;

    ADOConnection1.Free;
    ADOCommand1.Free;

    end;
    exports GetSimpleText;
    begin
    end.
  • : So, it is ok now?
    :
    : library mydll;
    : uses
    : Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
    : Forms,
    : Dialogs, ADODB, DB, StdCtrls;
    : var
    : ADOConnection1: TADOConnection;
    : ADOCommand1: TADOCommand;
    : {$R *.res}
    : procedure GetSimpleText(); stdcall;
    : begin
    : ShowMessage('Hello');
    : ADOConnection1 := TADOConnection.Create(nil);
    : ADOCommand1:= TADOCommand.Create(nil);
    : ADOConnection1.Open;
    : ADOConnection1.connectionstring:= 'Provider=SQLOLEDB.1;Integrated
    : Security=SSPI;Persist Security Info=False;Initial Catalog=fx;Data
    : Source=it_ld_big';
    : ADOCommand1.Connection:=ADOConnection1;
    : ADOCommand1.CommandText:='UPDATE Brokers SET spread = ''33''';
    : ADOConnection1.Close;
    :
    : ADOConnection1.Free;
    : ADOCommand1.Free;
    :
    : end;
    : exports GetSimpleText;
    : begin
    : end.
    :
    I don't know. It looks ok, but what does the compiler give for errors, if any?
  • From compiler no errors!

    But my program(MetaTrader - forex broker platform), from which Im using my dll is crashing after ShowMessage("Hello!");

    I suppose there is a problem with shared memory

    What do You think?
  • : From compiler no errors!
    :
    : But my program(MetaTrader - forex broker platform), from which Im
    : using my dll is crashing after ShowMessage("Hello!");
    :
    : I suppose there is a problem with shared memory
    :
    : What do You think?
    :
    Based on your description it could be one of the following things:
    - Shared Memory
    - Out of memory
    - Connection Aborted abnormally
    - Invalid object state
    - Writing of data into active code
    - Abnormal termination/crash of the SQL server

    Try using the debugger to find the error. It is possible to debug a DLL, by placing a breakpoint in the DLL source and specifying another project to run in the Run > Options dialog.
Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories