• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 如何使自己定义的枚举类型(或其他结构体类型)在其他开发环境中可用?

如何使自己定义的枚举类型(或其他结构体类型)在其他开发环境中可用?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了定义结构体类型,如何定义结构体类型,定义结构体类型变量,自定义结构体类型,结构体类型等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 如何使自己定义的枚举类型(或其他结构体类型)在其他开发环境中可用?
描述:

我用mfc appwizard(dll)作了一个Automation的DLL,如何在该DLL中定义一枚举或其他的如结构体类型
最后生成的DLL,在VB或其他开发工具引用时,可使用这些类型?如:在VB中可直接定义:
dim a as DLL工程.指定的枚举类型.比如说类型如下:
enum ENUM_CXIMAGE_FORMATS{
CXIMAGE_FORMAT_UNKNOWN,
CXIMAGE_FORMAT_BMP
};
本人菜鸟,大家别笑啊,多谢帮忙!


解决方案1:

在IDL定义枚举类型:
typedef
[
uuid(F1A3AFB8-EC53-4bc9-A0D7-5F91D65BCACB) ,  version(1.0),
helpstring("User Infomation enum Type")
]
enum tagImageFMT
{
[helpstring("TIF")] IF_TIFF=0,
[helpstring("BMP")] IF_BMP=1,
}ImageFMT;
MIDL编译器能将之生成头文件,有两种方法:
1、命令行: midl /Oicf /h "NonATLObject.h" /iid "NonATLObject_i.c"
2、工程设置中选中IDL/ODL文件-〉MIDL标签页-〉output header filename,输入头文件名称即可。
然后哪里要用,就将其Include进去即可。

解决方案2:

导出类,在你的导出类里面建立一个你定义的Enum变量
如:
enum yourCustomEnum{
yourCustomEnumFirst   = 0,
yourCustomEnumSecond  = 1,
};
class AFX_EXT_CLASS yourCustom  
{
public:
yourCustomEnum yCusEnum;
yourCustom();
virtual ~yourCustom();
};

解决方案3:

不修改idl的话,导出2个只读属性,名字叫CXIMAGE_FORMAT_UNKNOWN、CXIMAGE_FORMAT_BMP,类型为long

解决方案4:

我没做过MFC DLL
在ATL下的做法
1.在idl文件中定义
typedef
[
    uuid(5FD2DC77-2F65-44C1-AD21-AF384D26342B) ,  //这个uuid可以用vc的GUIDGEN.EXE工具生成
    version(1.0),
    helpstring("User Infomation struct Type")
]
struct MY
{
    [helpstring("Name")]                        BSTR     bstrName; 
}MY;
2.stdafx.h中定义
const IID USERINFO_IID = { 0x5FD2DC77, 0x2F65,0x44C1,{
0xad,
0x21,
0xAF,
0x38, 
0x4d,
0x26,
0x34,
0x2b
}
注意名字和uuid要一样

解决方案5:

好久没做这块了,说得不对,还望见谅。
在MSDN中就有相关介绍(搜索关键字IDL):
enum
enum [tag ] { identifier [=integer-value ] [ , ... ] } 
tag 
Specifies an optional tag for the enumerated type. 
identifier 
Specifies the particular enumeration. 
integer-value 
Specifies a constant integer value. 
Examples
typedef enum {M />  
typedef enum {Clemens=21, Palmer=22, Ryan=34} pitchers; 
 
Remarks
The keyword enum is used to identify an enumerated type. Enum types can appear as type specifiers in typedef declarations, general declarations, and function declarators (either as the function-return-type or as a parameter-type specifier). For the context in which type specifiers appear, see IDL.
In the MIDL compiler's default mode, you can assign integer values to enumerators. (This feature is not available when you compile with the /osf switch.) As with C-language enumerators, enumerator names must be unique, but the enumerator values need not be.
When assignment operators are not provided, identifiers are mapped to consecutive integers from left to right, starting with zero. When assignment operators are provided, assigned values start from the most recently assigned value. 
The maximum number of identifiers is 65,535. 
Objects of type enum are int types, and their size is system-dependent. By default, objects of enum types are treated as 16-bit objects of type unsigned short when transmitted over a network. Values outside the range 0 - 32,767 cause the run-time exception RPC_X_ENUM_VALUE_OUT_OF_RANGE. To transmit objects as 32-bit entities, apply the v1_enum attribute to the enum typedef.

解决方案6:

用idl来定义枚举
外部是可以看到的

解决方案7:

最好声明成OleVariant类型的变量,接口通用

解决方案8:

idl是支持枚举类型的

解决方案9:

这些类型应该符合C语言的规定。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何在接口定义语言IDL中定义自定义结构体类型
  • 如何使自己定义的枚举类型(或其他结构体类型)在其他开发环境中可用?
  • 接口如何传递自定义的结构体类型的参数?先谢了

相关文章

  • 2017-06-04 索取简单的三层应用中COM组件的源程序
  • 2017-06-04 Boundschecker检测ocx程序结果如下
  • 2017-06-04 IDispatch::Invoke如何通过dispid调用方法?
  • 2017-06-05 扩展DLL的问题
  • 2017-06-04 quickpatch!!各位大侠看过来!!!
  • 2017-06-04 OCX控件替换的问题
  • 2017-06-04 在通过ADOX创建Access表时,怎么设字段的标题啊?
  • 2017-06-04 ATL中CString,list怎么使用,包含哪个头文件中?
  • 2017-06-05 简单问题请教大家:杀线程
  • 2017-06-04 问一下net中的atl怎样引用comserver的头文件

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 我想得到表的行数和列数。但在Excel9olb中找不到Columns和Rows这两个类,我要用他们该怎么办呢?
    • VC调用com接口操控Outlook2003,出现安全报警对话框
    • 求一源程序《进程管理器》类似Windows2000的任务管理器要求:能得到每进程的详细信息分若不够可另开贴给分
    • 问个打包加密问题。
    • 链表的插入问题!
    • 如何建立一个udp服务器,采用多线程还是指令序列?关注有分!(1000分)
    • 调试时,提示visa32dll找不到是怎么回事?
    • 挂接线程虚消息队列问题
    • 1:Cstring类是线程安全的吗?2:我定义的全局变量CListCtrl在程序退出时应该如何释放呢?还是该类会自动释放
    • 救命啊!我用BCB6开发了一个三层应用的客户端ActiveXForm控件,然后,用VC编写一个有对话窗的控件,将BCB编的控件放在VC的控件窗体DIALO

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有