问题如下:
C++的原型(pConfMethod保存相应结构体的地址):
  BOOL bIMSConfMethod(long iType, short* pConfMethod)
Delphi通过导入生成的调用函数声明:
  function TSoftDAIMS.bIMSConfMethod(iType: Integer; var pConfMethod: Smallint): WordBool;现我通过以下两种方式调用出错(ConfMethod为TConfMethod结构体):  1.  p := PSmallInt(@ConfMethod)^;
      TestOCX.bIMSConfMethod(1, p);   2.  p := SmallInt(@ConfMethod);
      TestOCX.bIMSConfMethod(1, p); 希望各位能帮我写写调用的方法.谢谢.

解决方案 »

  1.   

    请参见 http://topic.csdn.net/u/20080220/07/43278335-7977-40bc-bec7-f4563461a508.html和楼主类似的问题, 里面有解决方案。
      

  2.   

    谢谢两位的回答,我看了一下jadeluo提供的链接,跟我的第一种调用方法一样的,但很奇怪的是,我通过
      p   :=   PSmallInt(@ConfMethod)^; 
      TestOCX.bIMSConfMethod(1,   p);   
    处理时,p的值就是我的结构体ConfMethod的第一个属性的值(第一个属性的定义iType: Integer),根本不是地址的值啊,到底是怎么一回事,现在还没搞明白哦.
      

  3.   

    因为你有^啊,这样就是取内容了。
    这样传递到一个var类型才是正确的。
      

  4.   

    但是C++的原型中声明了pConfMethod是保存相应结构体的地址的,我传递的不是地址,这样是有问题的吧?
      

  5.   

    C ++中指针类型,会在delphi中转化成var x:type这样的参数类型。或者x:^type这样参数类型。
      

  6.   

    akirya :意思说按照第一种方式调用就没问题了吗?