这是我的班级和相关界面:
[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
?
答案 0 :(得分:1)
你为什么要这样?使用适合所有操作系统和位数的数据的类型。
你可以使用int。 COM知道MIDL编译器和TLB(类型库)中的__int3264类型,甚至VARIANT也有VT_INT类型。
因此,IDispatch驱动的自动化也将获得相应的价值。
但请注意,即使有一些编组,当你有64位外部COM服务器和32位进程请求数据时,编组器会将之前的VT_INT转换为VT_I8 ...另一方面是32位外部COM服务器将VT_INT作为VT_I4返回到64位进程...