library prn_sml;uses
  SysUtils,
  Classes,
  MyComm in 'MyComm.pas';//一个pascal文件,无窗体,内有TComm类
Exports
    Print_M;//接口过程名
{$R *.res}
begin
//--------------------------------------------------------------
procedure Print_M(Str:String;Mark:Integer);//过程定义
var
  TestComm: TComm;
  S:String;
  TestBytes: array[1..10] of byte;
  i: integer;
begin
  if(Mark=0)then
   S :=#27+'8 '+Str;
  if(Mark=1)then
   S :=#27+'8 '+Str+#13;  TestComm.WriteData(PChar(s), Length(s));
  for i:=1 to 10 do TestBytes[i] := i;
  TestComm.WriteData(@TestBytes, 10);
end;
//----------------------------------------------------------------
end.一个使用串口打印机的dll。我用BCB的,这个是很早以前用delphi写的一个应用中提取出来的,用builder调用同型号打印机有问题,想起来把这个delphi的东西做成dll,对delphi不精通,看了不少例子但是做出来编译报错~~~各位帮我看看哪里有问题啊!!

解决方案 »

  1.   

    把procedure Print_M(Str:String;Mark:Integer);放到'MyComm.pas'中定义。
      

  2.   

    这个单元导出你定义的函数,过程
    所以最好把过程写到MyComm.pas
      

  3.   

    procedure Print_M(Str:String;Mark:Integer);stdcall;  //别忘了stdcall;或export;MyComm; //in 'MyComm.pas';多余了啦
      

  4.   

    还是报错啊!
    library prn_sml;uses
      SysUtils,
      Classes,
      MyComm in 'MyComm.pas';
    Exports
        Print_M;  //这句:[Error] prn_sml.dpr(8): Undeclared identifier: 'Print_M'
    {$R *.res}
    begin
    end.
    在Mycomm.pas中
    Type中的申明
          procedure Print_M(Str:String;Mark:Integer);在Mycomm.pas中的定义
    procedure TComm.Print_M(Str:String;Mark:Integer);
    var
      S:String;
      TestBytes: array[1..10] of byte;
      i: integer;
    begin
      if(Mark=0)then
       S :=#27+'8 '+Str;
      if(Mark=1)then
       S :=#27+'8 '+Str+#13;  WriteData(PChar(s), Length(s));
      for i:=1 to 10 do TestBytes[i] := i;
      WriteData(@TestBytes, 10);
    end;真是郁闷ing~~~
      

  5.   

    我把思路说一下,然后看看那位大虾给点提示!1、一个原有的.pas文件,叫做Mycomm.pas(其中有TComm类)在一个原有的工程中被调用,调用他的是一个过程叫做procedure Print_M(Str:String;Mark:Integer)2、现在重新建立了一个项目,是dll项目,想法是在dll中调用Mycomm.pas文件中的TComm用以控制串口打印机。应该怎么写?还要不要重新编辑Mycomm.pas这个文件,还有在dll中还用Print_M作为过程名,而且是借口函数,大家看看怎么办!最好有代码~~~谢谢各位~~
      

  6.   

    TestComm 有沒有創建, 初始化???
      

  7.   

    在MyCom.pas中定义Print_M的时侯,不能定义成 TComm 类的方法,需要是一个全局方法。
    而且在Print_M中,testComm需要先创建,使用后销毁。
      

  8.   

    被逼无奈,重新用C++写了一个dll谢谢各位!!