小编jus*_*tin的帖子

C4503警告?我如何解决/摆脱它们?

这是我第一次尝试C++ STL.我正在尝试使用map构建一个多维关联数组.例如:

typedef struct DA {
    string  read_mode;
    string  data_type;
    void    *pValue;
    void    *pVarMemLoc;
}DA;

int main()
{
    map<string, map<string, map<string, map<string, map<string, DA*>>>>> DATA;

    DATA["lvl1"]["stg1"]["flr1"]["dep1"]["rom1"] = new DA;
    DATA["lvl1"]["stg1"]["flr1"]["dep1"]["rom2"] = new DA;
    DATA["lvl1"]["stg1"]["flr1"]["dep1"]["rom3"] = new DA;

    IEC["lvl1"]["stg1"]["flr1"]["dep1"]["rom1"]->read_mode = "file";
    IEC["lvl1"]["stg1"]["flr1"]["dep1"]["rom2"]->read_mode = "poll";
    IEC["lvl1"]["stg1"]["flr1"]["dep1"]["rom3"]->read_mode = "report";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在VS2005中编译上面的代码时,我收到了170个C4503警告.所有警告都是关于"超出装饰名称长度,名称被截断".该程序似乎运行正常.

任何人都要花些时间向我解释是什么原因引起了这些警告以及如何解决这些问题?提前致谢 :)

Warning 1   warning C4503: 'std::map<_Kty,_Ty>::~map' : decorated name length exceeded, name was truncated  c:\program files\microsoft visual studio 8\vc\atlmfc\include\cstringt.h 2121
Warning 2   warning C4503: 'std::map<_Kty,_Ty>::map' : decorated name length …
Run Code Online (Sandbox Code Playgroud)

c++ string stl map name-decoration

8
推荐指数
3
解决办法
1万
查看次数

显式加载 DLL

我正在尝试显式链接 DLL。除了 DLL 文件本身以及有关类及其成员函数的一些文档之外,没有其他资源可用。

从文档来看,每个类都有自己的

  1. 成员 typedef
    示例:typedef std::map<std::string,std::string> Server::KeyValueMap, typedef std::vector<std::string> Server::String Array
  2. 成员枚举
    示例:enum Server::Role {NONE,HIGH,LOW}
  3. 成员函数
    示例:void Server::connect(const StringArray,const KeyValueMap), void Server::disconnect()

实现来自谷歌搜索的代码,我设法加载可以调用断开连接函数的dll。

目录.h

LPCSTR disconnect = "_Java_mas_com_oa_rollings_as_apiJNI_Server_1disconnect@20";  
LPCSTR connect =   
"_Java_mas_com_oa_rollings_as_apiJNI_Server_1connect@20";
Run Code Online (Sandbox Code Playgroud)

我从depends.exe 中获取了上面的函数名称。这就是 C++ 中所谓的修饰/修饰函数名称吗?

主程序

#include <iostream>
#include <windows.h>
#include <tchar.h>
#include "dir.h"

typedef void (*pdisconnect)();

int main()
{
    HMODULE DLL = LoadLibrary(_T("server.dll"));  
    pdisconnect _pdisconnect;`

    if(DLL)
    {
        std::cout<< "DLL loaded!" << std::endl;
        _disconnect = (pdisconnect)GetProcAddress(DLL,disconnect);


        if(_disconnect)
        {
            std::cout   << "Successful link to …
Run Code Online (Sandbox Code Playgroud)

c++ dll explicit class

5
推荐指数
1
解决办法
4万
查看次数

标签 统计

c++ ×2

class ×1

dll ×1

explicit ×1

map ×1

name-decoration ×1

stl ×1

string ×1