这是我的类和相关接口:
[Guid("xx")]
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IStudentItem
{
string Type { get; set; }
DateTime Week { get; set; }
int Study { get; set; }
}
[Guid("yy")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class StudentItem : IStudentItem
{
public string Type { get; set; }
public DateTime Week { get; set; }
public int Study { get; set; }
}
如您所见,Study
被定义为int
.
但是在 MFC 方面,当我使用这个属性时,我最终得到了一个long
:
long lStudyNumber = 0;
if(SUCCEEDED(studentItem->get_Study(&lStudyNumber)))
oEntry.iStudyPoint = static_cast<int>(lStudyNumber);
我的 DLL 有 86x 和 64x 版本。有没有办法让get_Study
财产返回一个integer
?
你为什么要这个。使用对所有操作系统和位数中的数据有意义的适当类型。
你可以使用整数。COM 知道 MIDL 编译器和 TLB(类型库)中的 __int3264 类型,甚至 VARIANT 也具有 VT_INT 类型。
因此,IDispatch 驱动的自动化也将收到相应的值。
但请注意,即使有一些编组,当您有 64 位外部 COM 服务器并且 32 位进程要求数据时,编组器会将之前的 VT_INT 转换为 VT_I8...另一方面,32 位外部 COM 服务器将返回VT_INT 作为 VT_I4 到 64 位进程...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句