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

首頁(yè) > 編程 > Delphi > 正文

排除Delphi5中編寫COM+程序的一個(gè)錯(cuò)誤

2019-11-18 18:44:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
         在Delphi5中編寫COM+組件時(shí)總獲得不到ObjectContext
也就是調(diào)用GetObjectContext返回nil. 這使事物處理沒法正確
完成. 有人在網(wǎng)上告訴我在COM+組件前加上一條加載mtxex.dll
語(yǔ)句.確實(shí)解決了這個(gè)問(wèn)題, 但好像運(yùn)行的并不穩(wěn)定.
PRocedure TgEntityObj.Initialize;
begin
  inherited;
  LoadLibrary('mtxex.dll');
end;
但我在Delphi6中不加這條語(yǔ)句就可以獲得ObjectContext.
我看了D6中的MTX單元和D5果然不一樣, 這也不能怪Borland
D5出來(lái)的時(shí)候WIN2000(COM+)還沒出來(lái)所以D5中MTX單位中還是加載
MTS的寫法.

在D5 MTX單元中253行.
implementation

uses ComObj;

type
  TGetObjectContextProc = function(var ObjectContext: IObjectContext): HRESULT; cdecl;
  TSafeRefProc = function(const rid: TGUID; Unk: IUnknown): Pointer; cdecl;
var
  GetObjectContextProc: TGetObjectContextProc = nil;
  SafeRefProc: TSafeRefProc = nil;
  MtsProcsLoaded: Boolean = False;

procedure LoadMtsProcs;
var
  Mtxdll: HModule;
begin
  if MtsProcsLoaded then Exit;
  MtsProcsLoaded := True;
  Mtxdll := GetModuleHandle('mtxex.dll');
  if mtxdll <> 0 then
  begin
    @GetObjectContextProc := GetProcAddress(Mtxdll, 'GetObjectContext');
    @SafeRefProc := GetProcAddress(Mtxdll, 'SafeRef');
  end;
end;

function GetObjectContext: IObjectContext;
begin
  LoadMtsProcs;
  if Assigned(GetObjectContextProc) then
    OleCheck(GetObjectContextProc(Result))
  else
    Result := nil;    //單步執(zhí)行時(shí)返回空.
end;

D6中的MTX單元 注意不同.

implementation

uses ComObj;

type
  TGetObjectContextProc = function(var ObjectContext: IObjectContext): HRESULT; cdecl;
  ///
  TCoGetObjectContextProc = function(const riid: TGUID; var ObjectContext: IObjectContext): HRESULT; stdcall;
  TSafeRefProc = function(const rid: TGUID; Unk: IUnknown): Pointer; cdecl;
var
  GetObjectContextProc: TGetObjectContextProc = nil;
  CoGetObjectContextProc: TCoGetObjectContextProc = nil;    ///
  SafeRefProc: TSafeRefProc = nil;
  MtsProcsLoaded: Boolean = False;

function IsComPlusPlatform: boolean;      //////  是否為COM+
var
  Ver: TOsVersionInfo;////
begin
  Ver.dwOSVersionInfoSize := sizeof(Ver);////
  GetVersionEx(Ver);
  if (Ver.dwPlatformID = VER_PLATFORM_WIN32_NT) and///
     (Ver.dwMajorVersion >= 5) then////
       Result := true          //
  else Result := false;
end;                              //////


procedure LoadMtsProcs;
var
  Mtxdll: HModule;
begin
  if MtsProcsLoaded then Exit;
  MtsProcsLoaded := True;
  if IsComPlusPlatform then        ////
  begin
    Mtxdll := GetModuleHandle('ole32.dll');   ///
    if mtxdll <> 0 then                         ///
       @CoGetObjectContextProc := GetProcAddress(Mtxdll, 'CoGetObjectContext');
  end                                             ///
  else
  begin
    Mtxdll := GetModuleHandle('mtxex.dll');
    if mtxdll <> 0 then
    begin
      @GetObjectContextProc := GetProcAddress(Mtxdll, 'GetObjectContext');
      @SafeRefProc := GetProcAddress(Mtxdll, 'SafeRef');
    end;
  end;
end;
function GetObjectContext: IObjectContext;
const
  IID_IObjectContext: TGUID = '{51372AE0-CAE7-11CF-BE81-00AA00A2FA25}';  ///
begin
  LoadMtsProcs;
  if Assigned(CoGetObjectContextProc) then    ///
    CoGetObjectContextProc(IID_IObjectContext, Result)     ///
  else if Assigned(GetObjectContextProc) then
    OleCheck(GetObjectContextProc(Result))
  else
    Result := nil;
end;

加斜細(xì)的是多的部分你只需要把這些部加D5的MTX就可以了.然后另存到你程序的當(dāng)前目錄
編譯程序就能獲得ObjectContext了.


上一篇:設(shè)計(jì)模式、用Delphi實(shí)現(xiàn)---->Strategy模式

下一篇:設(shè)計(jì)模式、用Delphi實(shí)現(xiàn)---->Builder模式

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 日韩色电影 | 日本视频在线播放 | 久久精品一二三区 | 亚欧在线免费观看 | 操网| 3级毛片 | 日韩色视频在线观看 | 久草在线公开视频 | 亚洲免费看片网站 | 国产精品久久久久网站 | 日韩黄在线 | 免费一级高清毛片 | 性欧美日本 | 亚洲人成网在线观看 | 国产免费久久久久 | 特级毛片a级毛片100免费 | 国产精品99久久久久久大便 | 欧美精品在线视频观看 | xxx18hd18hd日本| 超碰97人人艹 | 丰满年轻岳中文字幕一区二区 | 久久色伦理资源站 | 欧美成人精品一区二区 | 狠狠操精品视频 | 久久成人免费观看 | 黄色特级片黄色特级片 | 亚洲成人高清电影 | 成人在线免费观看小视频 | 欧洲精品久久久久69精品 | 2019天天干夜夜操 | 黑人一级片视频 | 午夜精品视频免费观看 | 国产成视频在线观看 | 成人毛片免费 | 免费看成年人网站 | 精品国内视频 | 在线91视频 | 羞羞答答www网站进入 | 亚洲综合视频网 | 色婷婷av一区二区三区久久 | 国产成人av免费 |