麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

PowerBuilder調用Delphi寫的Dll時發生的奇怪問題

2019-11-18 18:01:22
字體:
來源:轉載
供稿:網友
因項目需要,我用Delphi寫了一個連接數據庫把數據導出到Sql文件的dll,其中使用了TADOQuery組件
其中只有一個導出方法:
function DataExport(path,ini_path:PChar):integer

  寫完之后,用delphi寫了一個test.exe進行測試,發現可以正常使用。
之后便把這個dll交給了同事,讓他在PowerBuilder中調用。同事拿過去之后發現,一旦調用DataExportPB就報告無法打開目標Dll。我想可能是因為兩邊運行的環境不一樣,隨后就把test.exe拷過去試試看。奇怪的是,test.exe運行正常。

  為了確定問題到底出現在哪里,我又使用Python和C#測試了一下,C#下面沒有問題,但是Python報告錯誤:
沒有調用 CoInitialize()
查閱資料之后發現,如果在Delphi的Dll里面使用了ADO組件,那么需要在使用之前調用ActiveX的CoInitialize方法。知道了問題之后就好辦多了,在源代碼中創建TADOQuery之前調用CoInitialize(),Python調用成功。

  本以為PowerBuilder也應該沒問題,可誰知還是一樣的問題。這下子我想不通了。Python中的ctypes模塊使用的C中的調用方法,參數傳遞方式應該和PowerBuilder一樣,可是為什么PB里面還是不行呢?同事讓我在Dll里面多寫一個輸出方法試試看,那好,我又寫了下面這樣一個方法:

function test:PChar;
begin
  result := 'Test string from test';
end;

  PB里面調用test方法成功,  接著同事又嘗試調用DataExport,成功了!!??為什么?這個test方法僅僅只是輸出一段固定的字符串而已,為什么DataExport就調用成功了呢?我真是百思不得其解。

  但是這時又出現一個問題,一旦退出PB應用程序則發生一個內存操作錯誤。

  我仔細檢查了Delphi代碼,以圖發現是不是哪一個對象沒有釋放,我的代碼如下:

function DataExport(path,ini_path:PChar):integer;
var
  query : TADOQuery;
begin
  .........
  CoInitialize();
  query := TADOQuery.Create(nil);
  .........
  query.Close;
  query.Free;
  CoUnInitialize();
  .........
end;

沒有什么問題啊!無奈之下我把CoInitialize()和CoUnInitialize()分成兩個獨立方法。
function init:integer;
begin
  try
    CoInitialize();
    result := 1;
  except
    on Exception:
      result := 0;
  end;
end;

function uninit:integer;
begin
  try
    CoUnInitialize();
    result := 1;
  except
    on Exception:
      result := 0;
  end;
end;

然后讓同事在窗體初始化事件中先調用 init,然后再關閉事件中調用 uninit。問題解決。什么都正常了。

雖然問題得到解決,但是我還是不明白為什么要這樣做。



上一篇:模擬delphi編輯窗體操作控件。。。

下一篇:Delphi下的接口編程學習筆記(原創)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 国产毛片在线看 | 国产一区免费 | 久久影院yy6080 | 日本免费中文字幕 | 国产自在线| 黄色网址免费进入 | 日本aaaa片毛片免费观蜜桃 | 久久精品.com | 操嫩草 | 九九热精品视频在线播放 | 成人店女老板视频在线看 | 欧美一极视频 | 欧美精品18| 国产日韩久久久久69影院 | 精品xxxx户外露出视频 | 国产亚洲网 | 国产手机国产手机在线 | 在线观看免费毛片视频 | av黄色在线免费观看 | 欧美性激情视频 | h视频免费观看 | 久久久久久久久久久高潮一区二区 | 亚洲精品久久久久久下一站 | 成人在线免费视频播放 | 成人福利在线视频 | 成年片在线观看 | 黄色片免费看网站 | 最近免费观看高清韩国日本大全 | 国产精品久久久久久久久久尿 | 成人性生活视频在线观看 | 爱看久久 | 久久久入口 | 麻豆19禁国产青草精品 | 综合网天天射 | 欧美乱论 | 成人情欲视频在线看免费 | 欧美中文字幕一区二区三区亚洲 | 欧美a级在线免费观看 | 久成人| av电影免费在线 | 久久久一区二区三区精品 |