C++ RPC代码编译EXE正常但编译DLL出现未声明标识符及语法错误
解决C++ RPC API DLL编译错误问题
编译EXE正常但DLL出现大量语法/未声明错误,根源是RPC_WSTR未正确定义,后续错误均为连锁反应。以下是针对性解决方案:
解决方案步骤
添加UNICODE预处理器宏
右键DLL项目 → 属性 → C/C++ → 预处理器 → 预处理器定义,添加UNICODE;_UNICODE;(用分号分隔已有定义)。RPC_WSTR的定义依赖UNICODE宏,EXE项目通常默认启用宽字符,而DLL项目可能未开启,导致类型未声明。确认编译模式为C++
右键项目 → 属性 → C/C++ → 高级 → 编译为,选择编译为C++代码(/TP)。若项目误设为C编译模式,会导致C++语法和RPC类型定义不兼容。检查头文件包含顺序
确保<Windows.h>在rpcdce.h、rpcndr.h之前包含,Windows.h定义的基础宏会影响RPC头文件的类型展开。
验证修改后的代码
#include <Windows.h> #include <rpcdce.h> #include <rpcndr.h> #include <iostream> #pragma comment(lib, "Rpcrt4.lib") int ConnectToRPC() { RPC_STATUS rStatus; RPC_WSTR binding; // RPC function to create a binding handle rStatus = RpcStringBindingComposeW(nullptr, (RPC_WSTR)L"ncalrpc", nullptr, (RPC_WSTR)L"ncalrpc:[ServiceEndPoint]", nullptr, &binding); if (rStatus != RPC_S_OK) { printf("failed to create a binding handle \n"); return -1; } return 0; } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: ConnectToRPC(); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; }
内容的提问来源于stack exchange,提问作者MasterYii
相关产品推荐
相关产品推荐

