syntax error : '__stdcall'

小曦子 2010-08-04 08:15:11
#ifdef __cplusplus
#define DLL_API extern "C" __declspec (dllexport)
#else
#define DLL_API __declspec (dllexport)
#endif

typedef NTSTATUS (NTAPI *NTALLOCATEVIRTUALMEMORY)(IN HANDLE ProcessHandle,
IN OUT PVOID *BaseAddress,
IN ULONG_PTR ZeroBits,
IN OUT PSIZE_T RegionSize,
IN ULONG AllocationType,
IN ULONG Protect
);


DLL_API NTALLOCATEVIRTUALMEMORY NtAllocateVirtualMemoryOrig;



上面是写在C++的DLL文件里面


然后编译的时候出现如下错误:



error C2059: syntax error : '__stdcall'
error C2091: function returns function
error C2146: syntax error : missing ';'
before identifier 'NtAllocateVirtualMemoryOrig'
fatal error C1004: unexpected end of file found



其它地方没错,就这里报错,好象是调用规则问题,但不知道要怎么写才不会出错,想请教一下论坛上谁写过这样的
...全文
1338 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qkong521 2013-03-27
  • 打赏
  • 举报
回复
引用 13 楼 blueblizza 的回复:
LZ你好 我在写代码的时候也遇到这个问题了 其实解决方法很简单 加上一句 typedef LONG NTSTATUS; 就可以了 因为NTSTATUS没有定义,所以VC不认。
我咋没发现。sdk编译完全没问题。。到了mfc就报错了。害我搞了半天。谢谢哈。。。
blueblizza 2011-01-27
  • 打赏
  • 举报
回复 1
LZ你好 我在写代码的时候也遇到这个问题了
其实解决方法很简单
加上一句
typedef LONG NTSTATUS;
就可以了
因为NTSTATUS没有定义,所以VC不认。
arong1234 2010-08-07
  • 打赏
  • 举报
回复
不要贴片断,贴整个文件,尽管你只加了这么点,加错地方也不行[Quote=引用 11 楼 ytfsse 的回复:]
我用百度、GOOGLE也没有查出啥问题,只是现在因为项目要在C++上写,所以得必须解决这个问题,希望有人能给出答案,或者分析下啥原因
[/Quote]
小曦子 2010-08-04
  • 打赏
  • 举报
回复
我用百度、GOOGLE也没有查出啥问题,只是现在因为项目要在C++上写,所以得必须解决这个问题,希望有人能给出答案,或者分析下啥原因
小曦子 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 arong1234 的回复:]
这和C++也应该没有关系的,是你代码中使用这个头文件的方式有问题。但是由于你给的片断,没法判断

引用 7 楼 ytfsse 的回复:
引用 5 楼 yunyun1886358 的回复:
你这句声明:
typedef NTSTATUS (NTAPI *NTALLOCATEVIRTUALMEMORY)(IN HANDLE ProcessHandle,
IN OUT PVOID *Base……
[/Quote]

上面几乎就是全部代码了,我用vc6自动创建一个动态链接库,然后就在里面加上上面的代码
小曦子 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 arong1234 的回复:]
你这代码不是完整代码吧?错误信息也似乎不全。感觉是其他地方导致错误的,看看最后一个错误尤其有此感觉

引用楼主 ytfsse 的回复:
#ifdef __cplusplus
#define DLL_API extern "C" __declspec (dllexport)
#else
#define DLL_API __declspec (dllexport)
#endif

t……
[/Quote]

我在.h文件里头就上面那些代码,其它的就只有vc6.0自动生成的DLLMAIN,其他的都没有了
arong1234 2010-08-04
  • 打赏
  • 举报
回复
这和C++也应该没有关系的,是你代码中使用这个头文件的方式有问题。但是由于你给的片断,没法判断[Quote=引用 7 楼 ytfsse 的回复:]
引用 5 楼 yunyun1886358 的回复:
你这句声明:
typedef NTSTATUS (NTAPI *NTALLOCATEVIRTUALMEMORY)(IN HANDLE ProcessHandle,
IN OUT PVOID *BaseAddress,
IN ULONG_PTR ZeroBits,
IN OUT PSIZE_T RegionSize,
IN ULONG ……
[/Quote]
小曦子 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yunyun1886358 的回复:]
你这句声明:
typedef NTSTATUS (NTAPI *NTALLOCATEVIRTUALMEMORY)(IN HANDLE ProcessHandle,
IN OUT PVOID *BaseAddress,
IN ULONG_PTR ZeroBits,
IN OUT PSIZE_T RegionSize,
IN ULONG AllocationType,
IN ULONG P……
[/Quote]
typedef 是没有问题的,如果你不信用百度google一下,如果用纯C写肯定是对的,只是现在写在C++的文件里头后就不对了
arong1234 2010-08-04
  • 打赏
  • 举报
回复
你这代码不是完整代码吧?错误信息也似乎不全。感觉是其他地方导致错误的,看看最后一个错误尤其有此感觉[Quote=引用楼主 ytfsse 的回复:]
#ifdef __cplusplus
#define DLL_API extern "C" __declspec (dllexport)
#else
#define DLL_API __declspec (dllexport)
#endif

typedef NTSTATUS (NTAPI *NTALLOCATEVIRTUALMEMORY)(IN HANDLE ProcessHandl……
[/Quote]
yunyun1886358 2010-08-04
  • 打赏
  • 举报
回复
你这句声明:
typedef NTSTATUS (NTAPI *NTALLOCATEVIRTUALMEMORY)(IN HANDLE ProcessHandle,
IN OUT PVOID *BaseAddress,
IN ULONG_PTR ZeroBits,
IN OUT PSIZE_T RegionSize,
IN ULONG AllocationType,
IN ULONG Protect
);

函数的返回类型NTSTATUS的定义是什么?这句:error C2091: function returns function,
函数返回了一个函数,我觉得还是你这句typedef有问题。
小曦子 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ayw215 的回复:]
DLL_API NTALLOCATEVIRTUALMEMORY NtAllocateVirtualMemoryOrig;
====
你这句话写的啥意思,有这样写导出函数的???????
[/Quote]
后来这个我去掉了,晕,这个只是不注意时加的,请帮忙看一下前面错误要怎么写才对
ayw215 2010-08-04
  • 打赏
  • 举报
回复
DLL_API NTALLOCATEVIRTUALMEMORY NtAllocateVirtualMemoryOrig;
====
你这句话写的啥意思,有这样写导出函数的???????
小曦子 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yunyun1886358 的回复:]
从提示信息来看是编译器不认识NTALLOCATEVIRTUALMEMORY。
你这句这样写是不是有什么问题啊:typedef NTSTATUS (NTAPI *NTALLOCATEVIRTUALMEMORY)(IN HANDLE ProcessHandle
[/Quote]

这样是没有什么的的,是调用 规则问题
yunyun1886358 2010-08-04
  • 打赏
  • 举报
回复
从提示信息来看是编译器不认识NTALLOCATEVIRTUALMEMORY。
你这句这样写是不是有什么问题啊:typedef NTSTATUS (NTAPI *NTALLOCATEVIRTUALMEMORY)(IN HANDLE ProcessHandle

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧