感谢垃圾王,但现在的问题是,外部库是一个OCX控件,不能动态装载

解决方案 »

  1.   

    装载外部运行库是在可执行程序映象文件被加载后程序运行之前做的事,就是说不可能在程序已经执行了才开始加载外部库。要不就象垃圾王那么做:)不过有一个笨方法,给你的程序加层皮,呵呵,比如你的程序名为A吧,可以再做一个B,把A加到B的资源里,发行时发行B,运行B时检察是否有B重复运行(当然B用不着什么额外的控件,最简单的程序就行),然后B解开资源A到一个目录,运行A。呵呵,的确是太笨了,不过也有个好处啊,你甚至可以把ocx放到B中和处理A一样处理,这样你和程序发行时只要一个文件就行了:)
      

  2.   

    很简单,在所有的application前面放置一个临界区判断,API函数,根据项目的主窗体的caption判断,返回值判断即可!
      

  3.   

    按Ctrl+F12键,选择Project1,加入下列语句
    program Project1;uses
    windows, {加入该句才能调用函数}
    Forms,
    Unit1 in 'Unit1.pas'{Form1};{$R *.RES}
    const classname='TForm1'; {声明为主窗体的类名}
    var handle:integer; {变量}begin
    {-----------------主要为该判断部分----------------------}
    handle:=findwindow(classname,nil);{查找是否有此类的窗体}
    if handle<>0 then {不为0则程序已运行}
    begin
    messagebox(0,'该程序已经有一个在运行中!','运行',0);{提示程序已运行}
    halt; {退出程序}
    end;
    {------------------------------------------------------}
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
    end.
      该程序在测试时由于Delphi也生成了此类实例窗体,所以会出现提示框,只有关闭Delphi后单独运行程序才能实现。