方法中添加对象参数后,编译无法通过?
给下面方法SetString添加了一个对象参数后编译无法通过?
- #include <windows.h>
- #include <stdio.h>
- //long SetString(char *str)
- long SetString(IExample *this,char *str)
- {
- return (0);
- }
- long GetString(char *buffer, long length)
- {
- return (0);
- }
- //typedef long SetStringPtr(char *);
- typedef long SetStringPtr(IExample *this,char *);
- typedef long GetStringPtr(char *,long);
- typedef struct
- {
- SetStringPtr * SetString;
- GetStringPtr * GetString;
- }IExampleVtbl;
- typedef struct
- {
- IExampleVtbl * lpVtbl;
- DWORD count;
- char buffer[80];
- }IExample;
- static IExampleVtbl IExample_Vtbl = {SetString, GetString};
- int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
- {
- return 0;
- }
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
this C++的关键字
回复 2# hellioncu
c中好像也能用,我前段时间看了一个例子,是在VC中应用的
申明定义嵌套了
:loop
long SetString(IExample *this,char *str)
05行,之前需要申明IExample
如果吧IExample的定义放到这个之前
typedef struct
{
IExampleVtbl * lpVtbl;
DWORD count;
char buffer[80];
}IExample;
IExample定义之前需要申明IExampleVtbl,
如果把IExampleVtbl申明提前,
typedef struct
{
SetStringPtr * SetString;
GetStringPtr * GetString;
}IExampleVtbl;
IExampleVtbl定义需要先声明 SetStringPtr , GetStringPtr
goto loop
COM中使用的几个宏的解释
* DECLARE_INTERFACE宏用于创建一个不从其它接口继承的接口。
DECLARE_INTERFACE_(注意下划线后缀)用于创建一个从其它接口继承而来的接口。
DECLARE_INTERFACE_有两个参数:新接口的名字和该接口的超类的名字。
* STDMETHOD宏以声明方法的名字作为参数,方法返回一个标准的COM HRESULT值。
STDMETHOD_宏能够说明自己的返回类型。它的两个参数是方法返回值的类型和方法的名字。
* PURE宏解释为 “=0”,说明该函数为纯虚函数。