各位xdjm,快救救我呀,4天弄不出来,我就惨了!!!我的问题是:
如何实现用Delphi来二次开发Geomedia,用以将当前(Mapview)地图输出打印,要保证输出的地图清晰明了(用于工程施工),即将矢量图以任何比例输出打印。现在想到的是,Geomedia自身有现成的动态连接库和类型库(GMLayout.tlb,PlayCmd.dll,PlaySupt.dll),可以实现上面我描述的功能,现在就是要将他的东西变为在Delphi中实现,当然首先是考虑使用Geomedia的DLL和类型库来实现,但是我现在用Delphi无法将其中的两个DLL(PlayCmd.dll,PlaySupt.dll)倒入,请问这是问什么(用别人的机子也不行),请各位大侠们帮我想想办法,如何实现我的地图打印功能(如果有其他的想法或实例也行),我先谢谢大家了。

解决方案 »

  1.   

    (以GeoMedia3.0为例),仅供参考:
    ---------------------------------------
    在Delphi中利用Geomedia控件编程
    1.前言
    GeoMeida是INTERGRAPH公司优秀的地理绘图软件,在Delphi中可以利用其在系统中注册的控件来编程。
    2.准备工作
    (1)、安装GeoMedia地理信息软件或注册其主要控件。
    主要控件名称:MapView控件、EventControl控件、DataView控件。
    其他控件名称:NorthArrow控件、ScaleBar控件。(可以不在Delphi中引入)
    (2)、在AUTOEXEC.BAT中加入GeoMedia的安装路径中Program目录:
    例如C:\Progra~1\Geomed~1\Program
    加入后重新启动机器。
    (3)、在Delphi中引入控件步骤:
    a. 选择“\Component\Import ActiveX Control…”后弹出对话框“Import ActiveX”,在列表
    框中选择“Intergraph Geomedia Event Control 3.0(Version 3.0)”后单击“Create Unit”按纽,
    b. 选择“\Component\Install Component…”后在弹出的对话框中选择“浏览”按纽
    ,选择”.Pas”文件,分别选择下列文件
    DataviewLib_TLB.pas
    GMEventControlLib_TLB.pas
    GMNorthArrowLib_TLB.pas
    GMScaleBarLib_TLB.pas
    MapviewLib_TLB.pas
    如果以上步骤正确的话会在指定的选项卡中出现以上控件
    建议将控件放在新建的选项卡(如:GeoMedia)上,
    c. 继续第一步,分别加入下列选项:
    Intergraph Geomedia MapView Control 3.0(Version 3.0)
    Intergraph Geomedia North Arrow Control 3.0(Version 3.0)
    Intergraph Geomedia Scale Bar Control 3.0(Version 3.0)
    d.引入类库
    选择“\Project\Import Type Library…”后弹出对话框“Import Type Library”,在列表框中
    逐一选择下列选项后单击“Create Unit”按纽,提示文件存在时否覆盖时选择“确定”.
    Intergraph GDO 1.0 Object Library
    Intergraph GeoMedia PAdvLgd
    Integraph GeoMedia PBasic
    Integraph GeoMedia PClient
    Integraph GeoMediaPClCmd
    Integraph GeoMedia PCSS
    Integraph GeoMedia PPipe
    Integraph GeoMedia PRaster
    Integraph GeoMedia PService
    Integraph GeoMedia Pview
    注:引入类库后,编译时可能会提示
    (a).某些属性未定义
    (b).过程的参数说明有误(如:多了“var”,主要就是这个)
    (c).只读属性不能赋值
    解决方法:
    (a).添加未定义的属性(前提要保证有定义该属性的过程和函数,一般该类的前面都有此过程 
        和函数说明)
    (b).去掉“var”(可能工作量较大,请耐心删除)
    (c).添加属性设置中的Write 过程(此提示一般是因为只对属性设置了Read过程)
    (4)、下面应该可以从控件选项卡上拖一个GMMapview控件到窗体上
    可能出现的问题:弹出对话框,显示 “Can not obtain Ole Handle”之类的信息,
    可能的原因:(1)、Autoexec.bat中未加入安装路径或路径加入错误 。
       (2)、Autoexec.bat中加入后未重新启动机器。
    解决办法:(1)、正确加入路径。
     (2)、重新启动机器
      

  2.   

    先谢谢theone_jxm(),我等会儿安妮的方法再试试。
      

  3.   

    Geranium(天使消失的街道):
    还差得很远呀,也请路过的xdjm都给我出出主意呀。 大家觉得先将Delphi不能倒入的DLL用VB来重新做一个DLL,然后再由Delphi来使用可否很好的实现我的功能。
      

  4.   

    使用DLL跟内部用什么语言无关,不知道你调试这个DLL报了什么错误。
      

  5.   

    动态链接库的实现方法  1. Load-time Dynamic Linking  这种用法的前提是在编译之前已经明确知道要调用DLL中的哪几个函数,编译时在目标文件中只保留必要的链接信息,而不含DLL函数的代码;当程序执行时,利用链接信息加载DLL函数代码并在内存中将其链接入调用程序的执行空间中,其主要目的是便于代码共享。  2. Run-time Dynamic Linking   这种方式是指在编译之前并不知道将会调用哪些DLL函数,完全是在运行过程中根据需要决定应调用哪个函数,并用LoadLibrary和GetProcAddress动态获得DLL函数的入口地址。
      

  6.   

    你想调用这些打印功能吧?应该会调用DLL的
      

  7.   

    可是我不知道DLL中有些什么东西呀,比如我想创建一个打印机的对象,我还不知道创建它需要一些什么参数,现在通过帮助也只是知道一小部分,还远远不够。
      

  8.   

    你一定要了解Geomedia,DLL只不过把Geomedia的一些功能封装起来供你调用罢了。
      

  9.   

    好像个工具可以看到DLL的导出函数,你试试看看它的导出函数,然后试试动态调用.如果它的DLL很小,看看是不是VC开发的,如果是,还要加载MFC的环境.
      

  10.   

    看到导出函数没用啊,人家要的是参数。
    vc的depends工具可以看导出函数。