如何在 SQL 服务器程序集中使用 Delphi DLL

how to use Delphi DLL in SQL Server assembly

Delphi动态链接库

library SqlDll;

uses
  System.SysUtils,
  System.Classes;

{$R *.res}

function SqlQuery(_a, _b: Integer): Integer; stdcall; export;
begin
  Result := _a + _b;
end;

exports
   SqlQuery;

begin

end.

SQL 服务器

DROP ASSEMBLY CalculateDelphi
GO
CREATE ASSEMBLY CalculateDelphi 
FROM 'C:\SqlDLL\SqlDll.dll' 
WITH PERMISSION_SET = unsafe  
GO

错误

Msg 6544, Level 16, State 1, Line 153 CREATE ASSEMBLY for assembly 'CalculateDelphi' failed because assembly 'CalculateDelphi' is malformed or not a pure .NET assembly. Unverifiable PE Header/native stub.

错误消息不言自明:

'CalculateDelphi' failed because assembly 'CalculateDelphi' is malformed or not a pure .NET assembly.

SQL 服务器需要 .NET 程序集,但您没有给它一个 .NET 程序集,而是给它一个普通的 C 样式 DLL,SQL 服务器不支持像其他一些数据库一样导入。

Delphi 无法再生成 .NET 程序集,当 Delphi.NET 在 Delphi 8.

之后被删除时,它失去了这种能力

对于您正在尝试做的事情,您必须使用支持 .NET 的编译器,例如 Visual Studio、RemObjects Oxygene 等:

  • 创建一个在内部调用您的 DLL 的 .NET 程序集包装器。

  • 移植 DLL 代码以直接编译为自己的 .NET 程序集。