标签: c++-cli

如何初始化和打印std :: wstring?

我有代码:

std::string st = "SomeText";
...
std::cout << st;
Run Code Online (Sandbox Code Playgroud)

这工作得很好.但现在我的团队想要搬到wstring.所以我尝试过:

std::wstring st = "SomeText";
...
std::cout << st;
Run Code Online (Sandbox Code Playgroud)

但这给了我一个编译错误:

错误1错误C2664:'std :: basic_string <_Elem,_Traits,_Ax> :: basic_string(const std :: basic_string <_Elem,_Traits,_Ax>&)':无法将参数1从'const char [8]'转换为'const std :: basic_string <_Elem,_Traits,_Ax>&'D:...\TestModule1.cpp 28 1 TestModule1

在搜索网络后,我读到我应该将其定义为:

std::wstring st = L"SomeText"; // Notice the "L"
...
std::cout << st;
Run Code Online (Sandbox Code Playgroud)

这个编译但打印"0000000000012342"而不是"SomeText".

我究竟做错了什么 ?

c++ c++-cli wstring

51
推荐指数
4
解决办法
6万
查看次数

Visual Studio 2010中没有适用于C++/CLI的IntelliSense?

我刚刚从Visual Studio 2008迁移到Visual Studio 2010(最终版)并注意到一个主要缺陷:

当我尝试在托管C++的C++源文件中使用AutoComplete时,页脚中会出现一个小注释:

IntelliSense for C++/CLI不可用

呃,从Visual Studio 2010中删除了用于C++/CLI的IntelliSense吗?有没有办法让这个回来?这相当有用...

intellisense c++-cli visual-studio-2010 visual-studio

50
推荐指数
4
解决办法
7万
查看次数

记录C++/CLI库代码以供c#使用 - 最佳工具和实践?

我正在开发一个项目,其中c ++/cli库主要来自ac#application.

有没有办法让c ++/cli中的代码注释在visual studio中对c#intellisence可见?

假设没有,那么记录c ++/cli代码的最佳方法是什么,以便从c#中更容易使用(当然在c ++/cli中)?您对XML评论vs doxygen与其他工具(哪些)的看法是什么?

documentation doxygen c++-cli documentation-generation

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

如何从Native C++调用C#库(使用C++\CLI和IJW)

背景:作为更大任务的一部分,我需要使C#库可以被非托管C++和C代码访问.为了自己回答这个问题,过去几天/几周我一直在学习C++/CLI.

似乎有许多不同的方法来实现使用来自非托管C++和C的C#dll.一些简单的答案似乎是:使用Interlope服务,使用.com.和regasm,使用PInvoke(似乎只从C#到C++),并在C++/CLR中使用IJW(看起来像是Interlope服务).我认为最好设置一个库,它可能是一个CLR包装器,它使用IJW代表本机C++和C代码调用我的C#dll.

细节:我需要将来自c ++代码的string和int的值传递给C#dll,并返回void.

相关性:许多公司有很多借口来混合和匹配C++,C和C#.性能:非托管代码通常更快,接口:托管接口通常更易于维护,部署,并且通常更容易看到,管理员也告诉我们.遗产代码也迫使我们.它就在那里(就像我们爬过的山一样).虽然如何从C#调用C++库的示例很丰富.如何通过Google搜索很难找到如何从C++代码调用C#库的示例,尤其是如果您想要查看更新的4.0+代码.

软件: C#,C++/CLR,C++,C,Visual Studio 2010和.NET 4.0

问题详情:好的多部分问题:

  1. 使用com对象有优势吗?还是PInvoke?还是其他一些方法?(我觉得这里的学习曲线同样陡峭,尽管我确实在Google Land中找到了有关该主题的更多信息.IJW似乎承诺我想要它做什么.我应该放弃寻找IJW解决方案和转而专注于此?)(优势/劣势?)

  2. 我是否正确想象有一个解决方案,我在C++/CLR中编写了一个利用IJW的包装器?我在哪里可以找到关于这个主题的更多信息,并且没有说我没有足够的Google /或者在没有告诉我你在那里看到它的情况下查看MSDN.(我想我更喜欢这个选项,努力编写清晰简单的代码.)

  3. 问题范围缩小:我觉得我的真正问题和需求是回答下面的小问题:如何设置一个非托管C++文件可以在visual studio中使用的C++/CLR库.我认为,如果我可以简单地在非托管C++代码中实例化托管C++类,那么我可能能够解决其余的问题(接口和包装等).我希望我的主要愚蠢是尝试在Visual Studio中设置引用/ #include等,我想可以有其他误解.也许这整个问题的答案可能只是一个教程或指令的链接,可以帮助我解决这个问题.

研究:我一遍又一遍地用谷歌搜索和Binged取得了一些成功.我找到了许多链接,向您展示如何使用C#代码中的非托管库.我承认有一些链接显示如何使用com对象.针对VS 2010的结果并不多.

参考文献: 我已经阅读了很多帖子.我试图解决最相关的问题.有些人似乎非常接近答案,但我似乎无法让他们工作.我怀疑我遗漏的东西非常小,比如滥用关键字ref,或者缺少#include或者使用语句,或者滥用命名空间,或者没有正确使用IJW功能,或者缺少VS的设置需要正确处理编译等.所以你想知道,为什么不包括代码?好吧,我觉得我不在我理解的地方,并期望我必须工作的代码.我想要在一个我理解的地方,当我到达那里时,我可能需要帮助修复它.我将随机包含两个链接,但我不允许在我当前的Hitpoint级别显示所有链接.

http://www.codeproject.com/Articles/35437/Moving-Data-between-Managed-Code-and-Unmanaged-Cod

这从两个方向调用托管和非托管代码的代码,从C++到Visual Basic,然后通过C++ CLR返回,当然我对C#感兴趣:http://www.codeproject.com/Articles/9903/Calling -managed码-从-非托管代码和副

c# c++ c++-cli visual-studio-2010 c#-4.0

47
推荐指数
5
解决办法
6万
查看次数

在C++/CLI中,如何使用'out'参数声明和调用函数?

我有一个函数将一个字符串解析为两个字符串.在C#中我会声明它是这样的:

void ParseQuery(string toParse, out string search, out string sort)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我会这样称呼它:

string searchOutput, sortOutput;
ParseQuery(userInput, out searchOutput, out sortOutput);
Run Code Online (Sandbox Code Playgroud)

当前项目必须在C++/CLI中完成.我试过了

using System::Runtime::InteropServices;

...

void ParseQuery(String ^ toParse, [Out] String^ search, [Out] String^ sort)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

但如果我这样称呼它:

String ^ searchOutput, ^ sortOutput;
ParseQuery(userInput, [Out] searchOutput, [Out] sortOutput);
Run Code Online (Sandbox Code Playgroud)

我得到一个编译器错误,如果我这样称呼它:

String ^ searchOutput, ^ sortOutput;
ParseQuery(userInput, searchOutput, sortOutput);
Run Code Online (Sandbox Code Playgroud)

然后我在运行时收到错误.我该如何申报和调用我的功能?

.net c++-cli pass-by-reference

46
推荐指数
2
解决办法
4万
查看次数

在C#应用程序中使用C++类DLL

我有一个非托管的C++ DLL,它只导出一个类(不是COM ......它只是一个简单的C++类)作为它的接口.我想在C#中使用这个类,但我被告知它不能仅仅导入到C#中.

在我的C#应用​​程序中使用此类的正确方法是什么?

c# dll unmanaged c++-cli

46
推荐指数
2
解决办法
5万
查看次数

有没有理由比CefGlue更喜欢CefSharp(反之亦然)?

在为.Net提供体面的Chromium Embedded Framework(CEF)实现方面,两个主要选项似乎是CefSharp和CefGlue.它们的方法不同(CefGlue使用P/Invoke调用CEF非托管代码,CefSharp使用围绕CEF库的混合模式C++/CLI包装器).

是否有某种原因混合模式汇编比P/Invoke调用更好?在所有其他条件相同的情况下,似乎CefGlue(P/Invoke lib)为CEF项目提供了一个"更薄"的包装器,这意味着响应上游库中的更新可能会更快.

那里有没有经验的两个图书馆谁可以分享差异化因素?

.net pinvoke webkit c++-cli chromium

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

在C++/CLI中转换char*和System :: String的最佳方法是什么

什么是从char*转换为System :: string并返回C++/CLI的批准方式是什么?我在Google上发现了一些对marshal_to <>模板化函数的引用,但看起来这个功能从来没有为Visual Studio 2005做过(而且在Visual Studio 2008中也没有,AFAIK).我还在Stan Lippman的博客上看到了一些代码,但它是从2004年开始的.我还看过Marshal :: StringToHGlobalAnsi().有没有一种被认为是"最佳实践"的方法?

.net string c++-cli

42
推荐指数
2
解决办法
6万
查看次数

从C++调用C#代码

我需要能够从C++调用任意C#函数.http://www.infoq.com/articles/in-process-java-net-integration建议使用ICLRRuntimeHost :: ExecuteInDefaultAppDomain(),但这只允许我调用具有以下格式的方法:int method(string arg)

调用任意C#函数的最佳方法是什么?

c# interop c++-cli

41
推荐指数
4
解决办法
7万
查看次数

在C++/CLI中,hat字符^有什么作用?

我正在阅读Ivor Horton的Beginning Visual C++ 2008,其许多CLR示例都有main的定义:

int main(array<System::String ^> ^args)
Run Code Online (Sandbox Code Playgroud)

我一页又一页地回到书的开头找到第一个这样的实例,并解释了它的真正含义,但找不到一个.

显然它意味着与标准相同int main(int argc, char *argv[]),但我想知道^实际使用的时间和原因,以及为什么它甚至存在(它是否做了指针*和引用&无法表示的东西)?

clr c++-cli visual-c++

40
推荐指数
2
解决办法
2万
查看次数