有人可以发一个简单的代码,可以转换,
System::String^
Run Code Online (Sandbox Code Playgroud)
至,
C++ std::string
即,我只想分配值,
String^ originalString;
Run Code Online (Sandbox Code Playgroud)
至,
std::string newString;
Run Code Online (Sandbox Code Playgroud) 我有一个用C++实现的类,它负责程序的算术运算,以及一个使用WPF的接口.我使用C#处理输入,但是我如何使用我的C++类?
我已经看到一些关于使托管C++包装类与它交互的注释,但我不知道从哪里开始.我也不知道如何将其与所有其他代码一起编译.我真的找不到这方面的教程,谷歌在托管C++上展示的东西似乎并没有什么帮助.
有什么东西可以帮助我吗?这对我来说似乎并不合理.
编辑尝试m3rLinEz解决方案,但它给我一个BadImageFormatException,我认为这是因为没有生成DLL.我按照所说的做了一切,不知道发生了什么.有任何想法吗?
主题标题实际上是我的问题.第二个问题是:我什么时候使用这两个?
我有很久以前创建的这个DLL,用于连接我开发的特定软件的数据库.我已经有4年多没有问题和无数的应用程序与这个DLL.
尝试部署我的最新创建,我收到以下错误:
System.IO.FileNotFoundException: Could not load file or assembly '***.dll' or one of its dependencies. The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)
因此,对于我写过的每个dll,我总是制作一个简单的表单应用程序来测试该DLL本身.运行这个简单的应用程序产生了同样的错误.该DLL不会加载或使用除以下内容之外的任何内容:System,System.Data,System.XML.因此,就它的依赖性而言,我没有看到任何错误.
顺便说一句,一切都在开发站工作.问题仅限于部署站..Net和必要的可再发行组件,因为我用C++完成所有工作,所以部署和工作.
运行FUSLOGVW.exe显示一切正常.
运行depends.exe说:警告:由于延迟加载相关模块中缺少导出功能,至少有一个模块具有未解析的导入.
我已经尝试重写整个事情了.这产生了相同的结果.
有线索吗?
EDITS
以下是总错误消息:
See the end of this message for details on invoking \"
just-in-time (JIT) debugging instead of this dialog box.\"
************** Exception Text **************\"
System.IO.FileNotFoundException: Could not load file or assembly 'connectionTo.dll' or one of its dependencies. The specified module could not be found.\"
File name: 'connectionToJobboss32.dll'\"
at TESTConnection.Form1.button1_Click(Object sender, EventArgs …
Run Code Online (Sandbox Code Playgroud) 什么是什么ref class
以及什么时候宣布一个类是"ref class"的任何好的网站或解释?
关于msdn的解释对我来说还不够,
base_type(可选)
基本类型.ref类或ref结构可以从零个或多个托管接口以及零个或一个ref类型继承.值类或值结构只能从零个或多个托管接口继承.
REF
该
ref
关键字告诉编译器将在堆上分配类或结构,并且对它的引用将传递给函数或存储在类成员中.该value
关键字告诉编译器类或结构中的所有数据都传递给函数或存储在成员中.
"旧"托管C++与"新"C++/CLI之间究竟有什么区别?
出于部署原因,我试图使用IJW在C++中包装C#程序集,而不是使用COM Callable Wrapper.
我已经在其他项目上完成了,但是在这个项目上,我得到了一个EEFileLoadException.任何帮助,将不胜感激!
托管C++包装器代码(这是在DLL中):
extern "C" __declspec(dllexport) IMyObject* CreateMyObject(void)
{
//this class references c# in the constructor
return new CMyWrapper( );
}
extern "C" __declspec(dllexport) void DeleteMyObject(IMyObject* pConfigFile)
{
delete pConfigFile;
}
extern "C" __declspec(dllexport) void TestFunction(void)
{
::MessageBox(NULL, _T("My Message Box"), _T("Test"), MB_OK);
}
Run Code Online (Sandbox Code Playgroud)
测试代码(这是一个EXE):
typedef void* (*CreateObjectPtr)();
typedef void (*TestFunctionPtr)();
int _tmain testwrapper(int argc, TCHAR* argv[], TCHAR* envp[])
{
HMODULE hModule = ::LoadLibrary(_T("MyWrapper"));
_ASSERT(hModule != NULL);
PVOID pFunc1 = ::GetProcAddress(hModule, "TestFunction");
_ASSERT(pFunc1 != NULL);
TestFunctionPtr pTest = …
Run Code Online (Sandbox Code Playgroud) 我在部署一个应用程序时遇到了一个奇怪的问题,该应用程序引用了一个用托管c ++编写的程序集.
我已经创建了一个程序集X,编译它并在一个名为Starter的exe文件中引用它.
Starter.exe在本地mashine上正常启动.但是,当我将启动器调试文件夹的所有内容复制到虚拟mashine并尝试在那里启动时,它会崩溃并出现以下异常:
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or
assembly 'X' or one of its dependencies. The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)
这对我没有任何意义,因为X与Starter.exe位于同一个文件夹中.
什么可能导致这个问题?
UPDATE
我已经在目标机器上检查了Reflector中的依赖项,并且能够找到所有这些文件的文件.
我还为所有项目将配置更改为x86/win32.
UPDATE
以下是Fusion Log的日志(位置:C:\ FusionLog\Default\Starter.exe\X,Version = 1.0.4538.22813,Culture = neutral,PublicKeyToken = null.HTM):
*** Assembly Binder Log Entry (6/4/2012 @ 1:56:13 PM) ***
The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.
Assembly manager loaded from: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe
--- A detailed error log …
Run Code Online (Sandbox Code Playgroud) 我们的项目结构如,
native.dll
: - 这包含用c\c ++编写的纯本机代码.这个native.dll使用*def文件公开了一些函数.
Wrapper Library(wrapper.dll compiled with .Net framework v4.0)
-为了使用的功能native.dll
,一个Wrapper lib(wrapper.dll)
是写在C++\CLI
使用:clr\oldsyntax
.此包装具有的所有代码Interoperability
和Marshalling
.
Application(Console App v4.0)
直接用于wrapper.dll
使用提供的功能native.dll
.
现在这个项目需要在.Net Core中运行.这意味着我们将有一个
.Net Core application
会reference wrapper.dll
,反过来会参考
native.dll
.
我知道这不会直接起作用.但问题是.Net Core(CoreCLR)是否支持 C++\CLI(clr\oldsyntax)运行时环境 ?
如果不是,该应用程序可能的解决方案是什么?
如何在Managed C++中编写以下C#代码
void Foo()
{
using (SqlConnection con = new SqlConnection("connectionStringGoesHere"))
{
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
Clarificaton: 对于托管对象.
managed-c++ ×10
.net ×4
c++-cli ×4
c# ×3
c++ ×2
visual-c++ ×2
.net-core ×1
coreclr ×1
dependencies ×1
deployment ×1
dll ×1
pinvoke ×1
ref ×1
reference ×1
string ×1
unmanaged ×1