草庐IT

CF_EXTERN_C_BEGIN

全部标签

c++ - Windows 上 DLL Exporting/Importing 和 Extern 的问题

我有一些关于Windowsdll的快速问题。基本上我使用ifdefs来处理dllexport和dllimport,我的问题实际上是关于dllexports和dllimports以及extern关键字的放置。我将dllimports/dllexports放在头文件中,但我是否必须将dllexport和dllimports放在实际定义中?对于typedef呢?我是否将dllimport/dllexport放在前面?如dllexporttypedefmapst_map另外关于extern关键字,我看到它被这样使用:extern"C"{dllexportvoidfunc1();}我也看到它被这

java - 关于extern "C"的C++到Java的转换问题

我必须将一些C/C++代码转换为Java。我的C++非常生锈。在.h文件中,我有以下内容:#ifdef__cplusplusextern"C"{#endif/*tonsofdeclarations*/#ifdef__cplusplus}/*externC*/#endifextern"C"有什么用?这是什么意思?它是否告诉编译器相应的代码应该被解释为纯C,而不是C++?编辑感谢您到目前为止的回答。我必须转换的代码的历史是,似乎一部分是先用C编写的,然后其余部分是用C++编写的。所以我的头文件似乎对应于“旧”C代码。我会将此代码转换为具有静态方法和属性的publicfinalclass。没

c++ - 在每个源文件中替代 "extern template"

我正在开发一个库,其中我们的许多核心对象都是模板,其中一个特定实例以指向该模板实例的智能指针的形式出现在项目的大多数文件中。我在单个源文件中明确实例化了这些模板。我们最近切换到C++11,我正在尝试使用新的externtemplateclassMyTemplate;加快编译速度。我的第一个问题是我是否在周围使用智能指针MyTemplate正在隐式实例化模板并要求文件顶部的“外部模板..”以避免重复实例化。我的第二个问题是是否有一些替代方法来添加所有这些externtemplateclassMyTemplate;到每个源文件。为我定义的每个模板搜索智能指针的每个实例并确保我在该文件中有正

c++ - 从常规 C++ 代码调用 CUDA 代码——整理出 extern "C"

我正在尝试从单独编译的C++文件调用CUDA(主机)函数:sample.cppC++文件:extern"C"voidcuda_function(inta,intb);intmain(){//statementscuda_function(23,34);//statements}cuda.cu文件:#include__global__voidkernel(inta,intb){//statements}voidcuda_function(inta,intb){//cuda_function}构建命令:g++-csample.cppnvcc-ccuda.cunvcc-osamplesamp

c++ - `std::string::begin()`/`std::string::end()` 迭代器失效?

#include#includeintmain(){std::strings="abcdef";std::strings2=s;autobegin=const_cast(s2).begin();autoend=s2.end();std::cout此代码将begin()const的结果与end()的结果混合在一起。这些函数都不允许使任何迭代器失效。但是我很好奇end()不使迭代器变量begin无效的要求是否实际上意味着变量begin可用于结束。考虑一个C++98,std::string的写时复制实现;非常量begin()和end()函数导致复制内部缓冲区,因为这些函数的结果可用于修改字符

c++ - extern 和 extern "C"用于变量

我正在编写供C程序使用的C++共享库。但是,我对extern和extern"C"有疑问。考虑以下代码我的头文件是这样的:#ifdef__cplusplusextern"C"intglobal;extern"C"intaddnumbers(inta,intb);#elseexternintglobal;#endif这很好用;我只需要声明intglobal;在我的.cpp或我的.c文件中。但是,我不明白的是:extern"C"和extern有什么区别?我尝试注释掉extern"C"intglobal并且有效!为什么?我知道extern"C"用于建立C链接。这就是为什么我有extern"C"

C++:extern "C"和类成员之间的命名空间冲突

我偶然发现了一个相当奇特的c++命名空间问题:浓缩示例:extern"C"{voidsolve(lprec*lp);}classA{public:lprec*lp;voidsolve(intfoo);}voidA::solve(intfoo){solve(lp);}我想在我的C++成员函数A::solve中调用c函数solve。编译器对我的意图不满意:errorC2664:'lp_solve_ilp::solve':cannotconvertparameter1from'lprec*'to'int'我可以在solve函数前加前缀吗?C::solve不起作用

c++ - 获取剪贴板数据(CF_UNICODETEXT);

请告诉我,为什么我会遇到这个问题:如果剪贴板包含unicode字符(例如俄语),我只会得到第一个选定的单词。“空格”字符前的第一个单词。如果剪贴板不包含unicode字符(仅限英文),我会获取所选文本的第一个字符。获取选中的文本:CStringAgetClipboard(){CStringAstrData;if(OpenClipboard(NULL)){HANDLEhClipboardData=GetClipboardData(CF_UNICODETEXT);char*pchData=(char*)GlobalLock(hClipboardData);strData=pchData;G

c++ - priorC++11 中的 std::vector::begin() 是否等同于 C++11 中的 std::vector::data()?

是std::vector::begin()来自之前-C++11相当于std::vector::data()在C++11中?我问这个的原因是,在C++11之前,我曾经将std::vector::begin()视为指针,但在C++11之后,它不是,而且我不能转换为等效的指针。那么,我可以在C++11之后改用data()吗? 最佳答案 不,begin返回一个迭代器,而data返回一个指针。对于给定的实现,这些可能是同一件事,但您不应该指望这一点。 关于c++-priorC++11中的std::

c++ - 奇怪的错误,set<int>::begin() 总是返回 const 迭代器

为什么set.begin()总是返回一个const迭代器而不是标准迭代器?35inttest(){36std::setmyset;37myset.insert(2);38myset.insert(3);39int&res=*myset.begin();40returnres;41}test.cpp:39:error:invalidinitializationofreferenceoftype‘int&’fromexpressionoftype‘constint’ 最佳答案 它没有返回const_iterator,而不是std::se