C++使用编译器VS2013,代码如下:
-------------------------------------------------------------------------------- C++
typedef enum
{
    a = 0,
    b = 1,
} RegMode;int setRegMode(RegMode mode)
{
    return setProperty<RegMode>(1, mode);
}template <class T>
int setProperty(int Id, const T& value)
{
   // int setPropertyMode(int Id, const void* data, int dataSize)
    return setPropertyMode(Id, &value, sizeof(T));
}
目前我更改的delphi代码如下:
-------------------------------------------------------------------------------- delphi
RegMode = (a=0, b=1);function setRegMode(Mode: RegMode): Integer;
begin
    // function setPropertyMode(Id: Integer; const data: Pointer; dataSize: Integer): Integer;
    Result := setPropertyMode(1, @mode, SizeOf(Mode));
end;=====================================================
注:我跳过了setProperty函数,直接调用setPropertyMode,最后是失败了,C++中setProperty的参数传递一头雾水,求助!

解决方案 »

  1.   

    setProperty<RegMode>(1, mode);
    生成的特化函数是:
    int setProperty(int Id, const RegMode& value)
    {
      return setPropertyMode(Id, &value, sizeof(RegMode));
    }
    从// int setPropertyMode(int Id, const void* data, int dataSize)来看,可能就是给value写入一个值Id。
    对Delphi来说,需要用{$Z4} 编译开关来保证枚举常量为4字节大小,和integer相同。