将CS .net包装器中的图像列表加载到Delphi中

时间:2016-08-18 09:14:03

标签: delphi type-conversion

我正在编写一个用于Delphi应用程序的CS .net包装器,我想从“远程”.net lib加载图像,所以我不需要在Delphi中维护一个“复制”图像列表。

问我如何通过TLB获取图像列表?

我认为我有3个选项来实现这个

  1. 启动应用程序,通过ref获取imagelist并复制到本地imagelist。这给了我一个IUnknown作为TLB中的ref参数,我能以某种方式使用它吗?
  2. 我可以使用字符串/ widestring或者某种类型的流,我认为可以/将被编组为delphi类型。
  3. 我可以将图像列表存储为位图并在启动时在delphi中加载 - 但是谁愿意这样做:)
  4. 任何想法/建议都非常受欢迎。

    这是包装方法

            public bool LoadImageList(ref ImageList imagelist16, ref ImageList imagelist32, ref String ResMsg) 
            {
                ResMsg = "Imagelist could be loaded: ";
                try {
                   imagelist16 = null;
                   imagelist32 = null;
                   if (!_initialized) return false;
                   imagelist16 = VideoOS.Platform.UI.Util.ImageList;
                   imagelist32 = VideoOS.Platform.UI.Util.ImageList32;
                   ResMsg = "Images loaded";
                   return true;
                }
              catch (Exception e) {
                ResMsg = ResMsg + e.Message;
                return false;
              }
    }    
    

    这是Delphi TLB单元

    function LoadImageList(var imagelist16: IUnknown; var imagelist32: IUnknown;
                       var ResMsg: WideString; out pRetVal: WordBool): HResult; stdcall;
    

1 个答案:

答案 0 :(得分:0)

“stdole.IPictureDisp”接口作为参数类型应该可以解决问题。

COM Interop&图片转换(通过API):http://blogs.msdn.com/b/andreww/archive/2007/07/30/converting-between-ipicturedisp-and-system-drawing-image.aspx