小编And*_*man的帖子

为什么不存在C++函数命名标准?

我为AutoCAD编写插件.如果我编写托管(即.net)插件,那么我可以使用任何可以与AutoCAD使用的.NET Framework版本一起使用的Visual Studio版本(非常方便):

  • AutoCAD 2009可以使用.NET 3.0,3.5
  • AutoCAD 2010可以使用.NET 3.5.
  • ...
  • AutoCAD 2016可以使用.NET 4.5,4.5.1

因此,通过Visual Studio 2013,我可以为AutoCAD 2009-2016编写.net插件.

但有时候我需要为AutoCAD编写非托管插件,因为它的托管.net API涵盖了非托管API(ObjectARX SDK).ObjectARX是C++的API.在这种情况下,我不能为每个AutoCAD版本使用相同的Visual Studio.例如,我将使用VS 2005进行AutoCAD 2009插件编写.因此我在我的虚拟机上安装了VS 2005-2013.我认为这非常不方便.

我知道,这个问题的存在是因为C++函数命名的标准不存在,并且每个版本的VS都有自己的名称生成规则,用于未标记的函数external "C".

但为什么这个标准还不存在呢?是什么原因呢?我确信这个理由是存在的.这种行为不方便不仅适合我(我向其他程序员询问过它).但是他们不知道为什么每个新的VS版本都有自己的C++函数命名规则,以及为什么不存在C++函数命名标准.

谢谢.

c++ visual-studio visual-c++

2
推荐指数
1
解决办法
103
查看次数

如何在C++中重载运算符

如何在C++中重载运算符?我试过这个:

#ifndef OBJECT_H
#define OBJECT_H
#include<cstdlib>
#include<iostream>

namespace TestNS{

    class Object{
    private:
        int ptrCount;
    public: 
        Object(): ptrCount(1){           
            std::cout << "Object created." << std::endl;
        }
        void *operator new(size_t size);
        void operator delete(void *p);
        Object *operator& (Object obj);
    };

    void *Object::operator new(size_t size){            
            std::cout << "Pointer created through the 'new' operator." << std::endl; 
            return malloc(size);
        }

    void Object::operator delete(void *p){
            Object * x = (Object *) p;
            if (!x->ptrCount){
                free(x);
                std::cout << "Object erased." << std::endl;
            }
            else{
                std::cout << "Object NOT …
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
1
解决办法
412
查看次数

为什么不发生这种情况?

简单的C++代码:

#include "../../std_lib_facilities.h"
#include <float.h>

double ctok(double c){
    const double koef_c_2_k = 274.15;
    double k = c + koef_c_2_k;
    if(k < -koef_c_2_k) error("Output abroad range of admissible values.");
    return k;
}

int main(){
    cout << "Max double value: " << DBL_MAX << endl;
    double c = 0;
    cout << "Celsius: ";
    cin >> c;
    double k = ctok(c);
    cout << "Kelvin: " << k << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

bush @ host-nix:〜/ cpp/bs/5/5.2 $ ./a.out
最大双值:1.79769e + 308
摄氏度:0 …

c++

1
推荐指数
1
解决办法
206
查看次数

如何正确指定我的命名空间的声明和第二种情况下的函数?

看,我把我的命名空间和函数放在了main这之前并成功编译:

#include <iostream>
#include <exception>
#include <string>
using namespace std;
//==================================================
namespace Bushman{
    void to_lower(char* s)
    // Replace all chars to lower case.
    {
        const int delta = 'a' - 'A';                
        while(*s){
            if(*s >= 'a' && *s <= 'z') *s -= delta;         
            ++s;
        }
    }
}
//==================================================
int main()
// entry point
try{
    namespace B = Bushman; // namespace alias
    void B::to_lower(char* s);  
    char* str = "HELLO, WORLD!";
    B::to_lower(str);   
    printf("%s\n",str);
}
catch(exception& e){
    cerr << e.what() << endl; …
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
1
解决办法
65
查看次数

为什么我不能在`friend`运算符中使用`private`字段?

头文件包含它:

class Shape_definition {
private:
    // ...
    std::vector<Instruction> items;         
public:
    //...
    friend std::istream& operator >> (std::istream& is, Shape_definition& def); // FRIEND!
};
//-----------------------------------------------------------------------------
std::istream& operator >> (std::istream& is, Shape_definition& def);
//...
Run Code Online (Sandbox Code Playgroud)

定义代码:

std::istream& operator >> (std::istream& is, Bushman::shp::Shape_definition& def){
    //...
    Bushman::shp::Instruction instr = Bushman::shp::Instruction::get_empty();
    while(is >> instr) def.items.push_back(instr); // Problem is here!
    return is;
}
Run Code Online (Sandbox Code Playgroud)

但我在MS Visual Studio编辑器中出错:

错误C2248:'Bushman :: shp :: Shape_definition :: items':无法访问类'Bushman :: shp :: Shape_definition'中声明的私有成员

为什么我不能privatefriend运算符中使用该字段?

谢谢.

c++ friend

1
推荐指数
1
解决办法
119
查看次数

WebGL:INVALID_OPERATION:vertexAttribPointer:stride或offset对类型无效

我学习WebGL.

当我尝试绘制三个点时,我会得到一些错误,每个点都有自己的位置,大小和颜色.我尝试通过相同的缓冲区来完成它.

// To draw three points. Each of this has own location, size and color.
function start(gl){
  if(!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)){
    console.log('Failes shaders initialization.');
    return;
  }
  var a_Position = gl.getAttribLocation(gl.program, 'a_Position');
  if(a_Position < 0){
    console.log('The "a_Position" variable was not found in the shader code.');
    return;
  }
  var a_PointSize = gl.getAttribLocation(gl.program, 'a_PointSize');
  if(a_PointSize < 0){
    console.log('The "a_PointSize" variable was not found in the shader code.');
    return;
  }

  var a_FragColor = gl.getAttribLocation(gl.program, 'a_FragColor');
  if(a_FragColor < 0){
    console.log('The "a_FragColor" variable was not found …
Run Code Online (Sandbox Code Playgroud)

opengl-es webgl opengl-es-2.0

1
推荐指数
1
解决办法
1428
查看次数

为什么DLL_THREAD_DETACH会发生两次?

我正在学习COM.我在DLL中编写了一个简单的COM组件,并在注册表中注册了它.然后我创建了一个简单的客户端并尝试使用我的COM组件.但我不明白这种DllMain行为(我也读过这个).

extern "C" BOOL WINAPI DllMain(
  _In_ HINSTANCE hinstDLL,
  _In_ DWORD     fdwReason,
  _In_ LPVOID    lpvReserved){
  pDll = hinstDLL;
  if (DLL_PROCESS_ATTACH == fdwReason){
    trace("DllMain(): DLL_PROCESS_ATTACH");
  }
  else if (DLL_THREAD_ATTACH == fdwReason){
    trace("DllMain(): DLL_THREAD_ATTACH");
  }
  else if (DLL_PROCESS_DETACH == fdwReason){
    trace("DllMain(): DLL_PROCESS_DETACH");
  }
  else if (DLL_THREAD_DETACH == fdwReason){
    trace("DllMain(): DLL_THREAD_DETACH");
  }
  else{
    trace("DllMain(): unknown variant...");
  }
  return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

我期望每个DLL_PROCESS_ATTACHDLL_PROCESS_DETACH都被调用并且每个DLL_THREAD_ATTACHDLL_THREAD_DETACH都被调用(如果没有发生异常).

但我看到一个DLL_PROCESS_ATTACH有两个DLL_THREAD_DETACH:

在此输入图像描述

为什么会这样?

c++ com dll winapi dllmain

1
推荐指数
1
解决办法
2265
查看次数

如何为Windows 7 x64构建Git 2.4.5?

如何为Windows 7 x64构建Git 2.4.5?我下载了代码源的zip文件并将其解压缩.如果我尝试通过nmakeMS Visual Studio 2013的实用程序构建这些源,那么我收到一个错误:

在此输入图像描述

git nmake visual-studio

1
推荐指数
1
解决办法
393
查看次数

不可能对外界隐藏模板的实施(用于保护知识产权)。我对吗?

我已经阅读了为什么模板只能在头文件中实现?我为什么不能我的模板类的定义进行了声明分开,并把它.cpp文件中?

如果我创建模板,那么cpp除了他们的-files 之外,我还要提供对他们的-files 的h访问,或者直接在头文件中写入定义。

因此,如果我想允许在其他应用程序中完全使用我的模板,那么我不能向外界隐藏它们的实现(为了保护知识产权)。我对吗?

c++ templates

1
推荐指数
1
解决办法
724
查看次数

Material UI:我可以在 DataGrid 单元格中使用 React 组件而不是预定义的单元格类型(“字符串”、“数字”、“日期”、“日期时间”)吗?

React、Material UI、TypeScript
我想将 React 组件放入DataGrid单元格中。我在这里阅读了有关单元格自定义类型的信息,但它对我没有帮助:它仅允许按字符串格式进行管理,但我需要使用组件而不是字符串。例如我想在单元格中使用Link组件。我的代码:

{ field: 'name', headerName: 'Name', width: 200,
    valueGetter: (params: ValueGetterParams): JSX.Element =>
        (<Link href={this.props.createRecordUrl(params.row.logicalName as EntityNames,
            params.row.id as ID)} target="_blank">{params.row.name}</Link>)
},
Run Code Online (Sandbox Code Playgroud)

但是我得到的是[object Object]字符串而不是Link单元格中的组件。我该如何解决问题?

javascript typescript reactjs material-ui

1
推荐指数
1
解决办法
1560
查看次数