动态加载dll

type
  TPrintProc = function(DataPrint: integer; PrintFile: WideString; PrintMode: Integer = 1): Integer; safecall;   //根据动态库中的函数来自定义类型

 

////////////////////////////////////////////////////////////函数中///////////////////////////////////////////////////////////////////////////////////////////////////

procedure TTechSingleGridForm.PrintDataSet(PrintMode: Integer);
var
  PrintProc: TPrintProc;
  PrintHand: HMODULE;
begin
  PrintHand := LoadLibrary('com_PrintReport.dll');
  try
    if PrintHand > 0 then
    begin
      @PrintProc := GetProcAddress(PrintHand, 'PrintByDataSet');
      if Assigned(PrintProc) then
      begin
        try
          PrintProc(Integer(ClientDataSet), Context.PageCode + '.rtm', PrintMode);
        except
          on E: Exception do
            Case PrintMode of
              0 : ComCommon.Prompt('打印预览失败,可能是如下的原因:' + #10#13 + E.Message);
              1 : ComCommon.Prompt('读取打印格式失败,可能是如下的原因:' + #10#13 + E.Message);
              2 : ComCommon.Prompt('打印失败,可能是如下的原因:' + #10#13 + E.Message);
            end;
        end;
      end;
    end
    else ComCommon.Prompt('装载com_PrintReport.dll失败或缺少该动态库!');
  finally
    FreeLibrary(PrintHand);
  end;
end;

posted on 2012-08-16 15:58  孤独的流浪汉  阅读(118)  评论(0编辑  收藏  举报

导航