C++调用C#接口,在gcnew C#类对象时,程序Crash

描述:

1.创建一个C++调用C#方法的DLL,在这个C++ DLL中,配置如下:

Use of MFC: Use Standard Windows Libraries
Common Language Runtime Support: Common Language Runtime Support/clr
.NET Target Framework Version: 4.5.2
C/C++->General->Common .. Support: Common Language Runtime Sup+port/clr
Enable Function-Level Linking: No(/Gy-)

C#类名CSharpText,命名空间CSharpTextNamespace
在C++ DLL中写了
#using "..\CSharpText.dll"
using namespace System;
using namespace System::Runtime::InteropServices;
using namespace CSharpTextNamespace;
C++ DLL通过COM暴露了一个接口,ConnectTOCSharp,其中创建C#对象
CSharpText ^ text = gcnew CSharpText;

2.现在由一个C++的ocx调用1中的C++ DLL,采用COM调用

CComPtr pICSharpText;
CoCreateInstance(CLSID_CSharpText,nullptr,CLSCTX_INPROC_SERVER,IID_ICSharpText,(void**)&pICSharpText;
pICSharpText->ConnectTOCSharp();
说明:
调用DLL的ocx属于非托管C++,且其中配置如下:
Use of MFC:Use MFC in a shared DLL
Ignore Import Library:Yes

3.问题产生在2中的pICSharpText->ConnectTOCSharp();,
COM连接成功,C++ Dll中创建gcnew时 Crash,提示:
Unhandled exception at 0xXXXXXX(KernelBase.dll) in XX.exe: 0xE0434352

4.求教如何创建和调用C#对象及接口,才不会出现上面问题?谢谢

c++

1个回答

目前gcnew之后不会crash了,
但是调用C#接口时Crash了

zgp08110330
攀小攀 你好,做了什么修改后gcnew之后不会crash才不会crash呢?
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++调用C#接口,在gcnew C#类对象时,程序Crash

描述: # 1.创建一个C++调用C#方法的DLL,在这个C++ DLL中,配置如下: Use of MFC: Use Standard Windows Libraries Common Language Runtime Support: Common Language Runtime Support/clr .NET Target Framework Version: 4.5.2 C/C++->General->Common .. Support: Common Language Runtime Sup+port/clr Enable Function-Level Linking: No(/Gy-) C#类名CSharpText,命名空间CSharpTextNamespace 在C++ DLL中写了 #using "..\\CSharpText.dll" using namespace System; using namespace System::Runtime::InteropServices; using namespace CSharpTextNamespace; C++ DLL通过COM暴露了一个接口,ConnectTOCSharp,其中创建C#对象 CSharpText ^ text = gcnew CSharpText; # 2.现在由一个C++的ocx调用1中的C++ DLL,采用COM调用 CComPtr<ICSharpText> pICSharpText; CoCreateInstance(CLSID_CSharpText,nullptr,CLSCTX_INPROC_SERVER,IID_ICSharpText,(void**)&pICSharpText; pICSharpText->ConnectTOCSharp(); 说明: 调用DLL的ocx属于非托管C++,且其中配置如下: Use of MFC:Use MFC in a shared DLL Ignore Import Library:Yes 3.问题产生在2中的pICSharpText->ConnectTOCSharp();, COM连接成功,C++ Dll中创建gcnew时 Crash,提示: Unhandled exception at 0xXXXXXX(KernelBase.dll) in XX.exe: 0xE0434352 4.求教如何创建和调用C#对象及接口,才不会出现上面问题?谢谢

c++调用c#的dll,using 命名空间报错的问题

代码:![图片说明](https://img-ask.csdn.net/upload/201808/15/1534348055_663887.png) 其中的Invoke 是引用的dll,c#写的![图片说明](https://img-ask.csdn.net/upload/201808/15/1534348126_143625.png) 报错名称必须是命名空间名 请问下是为什么??怎么解决!

关于在C++DLL中使用C#对象的问题

class ClientListener : public IClientListener { public: ClientListener(IClientListenerEx ^ pListener) { //pListener为C#对象,我怎么用变量保存它 } private: IClientListenerEx ^ m_pListener;//在C++中直接定义此变量有错 }

c#调用c++托管类dll出现无法加载文件或程序集

我的c#程序中调用了c++写的托管类程序,在安装有vs2010软件的机子上都可以正常运行,在未安装该软件的机子上运行该程序便会提示”未能加载文件或程序集”,如图所示,尝试了修改dll的network版本,以及主程序和该dll的运行环境,删除了程序的.pdb文件,将装有vs机子上Microsoft.NET->Primary Interop Assemblies目录下的dll文件全部复制至未安装机子上的Microsoft.NET目录下,仍未解决问题,麻烦各位大神们赐教![图片说明](https://img-ask.csdn.net/upload/201604/11/1460354547_684670.jpg)

clr工程中,gcroot定义了c#类的对象,把这个对象保存为成员变量,那么,在重复使用的时候,需要释放吗

1.clr工程中,定义c#类的gcroot对象 2.gcroot<class> object 3.object = gcnew class 4.如果要把object再次gcnew,那么上一次的怎么释放 谢谢

C++调用 C# dll 的问题

C#代代码 ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ClassLibrary1 { public class ClassDlg { public void ShowDalog() { Form1 f1 = new Form1(); f1.ShowDialog(); } } } ``` C++代码 ``` #include <iostream> #include <string> #using "C:\\Users\\10027\\Documents\\visual studio 2015\\Projects\\ClassLibrary1\\ClassLibrary1\\bin\\Debug\\ClassLibrary1.dll" using namespace std; using namespace ClassLibrary1; int main() { ClassDlg ^ classdlg = gcnew ClassDlg; classdlg->ShowDalog(); system("pause"); return 0; } ``` 出现错误 : “System.IO.FileNotFoundException”类型的未经处理的异常在 未知模块。 中发生 其他信息: 未能加载文件或程序集“ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。 /clr已设置,dll已放入debug里 为什么还会报错

c# dll接口暴露的问题

封装了一个dll给别人使用,他拿到dll之后我只想提供圆圈里面的类和方法,二方框里面的类和方法最好在对象浏览器看不到。方框里面的方法是这个dll的协作类,不对外提供接口,除了适配器方法,大家还知道有其他什么办法吗? ![图片说明](https://img-ask.csdn.net/upload/201706/12/1497234234_194822.png)

C++调用C#的dll 语法错误 求高人指点

![C#中代码](https://img-ask.csdn.net/upload/201607/27/1469603627_1824.png) C++中 #using ".\jiamigou\ScanJiaMi.dll" using namespace ScanJiaMi; 使用时 JiaMi ^c = gcnew JiaMi(); 报错 错误 2 error C2065: “JiaMi”: 未声明的标识符

C++ 调用C#写的dll 语法错误 求高人指点

![C#中的代码](https://img-ask.csdn.net/upload/201607/27/1469604319_432043.png) C++中 #using ".\\jiamigou\\ScanJiaMi.dll" using namespace ScanJiaMi; 使用时 JiaMi ^c = gcnew JiaMi(); 报错 错误 2 error C2065: “JiaMi”: 未声明的标识符

MFC如何一个类调用在另一个类中的.cpp中定义的static成员变量

我在dlg2所属类中的.cpp中定义了static bool choose=true 我想在dlg1所属类中调用dlg2中的这个静态成员,应该怎么写? void Cdlg1::OnButton1() { // TODO: Add your control notification handler code here }

c#调用matlab引擎画图遇到MWNumericArray的类型初始值设定项引发异常的问题

private void button2_Click(object sender, EventArgs e) { IntPtr engine; engine = matlabClass.engOpen(null); MWArray []Y=new MWArray[120000]; MWNumericArray plotValue = new MWNumericArray(MWArrayComplexity.Real, 1, 120000); int k; double[] m = new double[120000]; object[]n=new object[120000]; for (k = 0; k < 120000; k++) { n[k] = dataGridView1.Rows[k].Cells[0].Value; m[k] = double.Parse(n[k].ToString()); } for (k = 1; k < 120000; k++) { plotValue[1,k+1] = m[k]; } matlabClass.engSetVisible(engine, false); matlabClass.engEvalString(engine,"X=1:120000;Y=1:120000;plot(X,Y)"); matlabClass.engClose(engine); } ``` 最近用c#写调用matlab的plot函数画图,我是用的visualstudio2010和matlab2017a,遇到一个很久没有解决的问题。 ```未处理 System.TypeInitializationException HResult=-2146233036 Message=“MathWorks.MATLAB.NET.Arrays.MWNumericArray”的类型初始值设定项引发异常。 Source=MWArray TypeName=MathWorks.MATLAB.NET.Arrays.MWNumericArray StackTrace: 在 MathWorks.MATLAB.NET.Arrays.MWNumericArray..ctor(MWArrayComplexity complexity, Int32[] dimensions) 在 转子系统故障诊断.Form1.button2_Click(Object sender, EventArgs e) 位置 F:\转子系统故障诊断\转子系统故障诊断\Form1.cs:行号 134 在 System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 在 转子系统故障诊断.Program.Main() 位置 F:\转子系统故障诊断\转子系统故障诊断\Program.cs:行号 18 InnerException: System.TypeInitializationException HResult=-2146233036 Message=“MathWorks.MATLAB.NET.Arrays.MWArray”的类型初始值设定项引发异常。 Source=MWArray TypeName=MathWorks.MATLAB.NET.Arrays.MWArray StackTrace: 在 MathWorks.MATLAB.NET.Arrays.MWNumericArray.get__Inf() 在 MathWorks.MATLAB.NET.Arrays.MWNumericArray..cctor() InnerException: System.TypeInitializationException HResult=-2146233036 Message=“MathWorks.MATLAB.NET.Utility.MWMCR”的类型初始值设定项引发异常。 Source=MWArray TypeName=MathWorks.MATLAB.NET.Utility.MWMCR StackTrace: 在 MathWorks.MATLAB.NET.Arrays.MWArray..cctor() InnerException: HResult=-2146233088 Message=Trouble initializing libraries required by .NET Assembly. Source=MWArray ``` ``` ``` ``` StackTrace: 在 MathWorks.MATLAB.NET.Utility.MWMCR..cctor() InnerException: 环境变量改过了,MCR也卸了装了好几次,目标平台是64位的,应该也没有问题,真不知道问题在哪里,感觉自己都要哭了。![图片说明](https://img-ask.csdn.net/upload/201907/27/1564207055_428476.png)![图片说明](https://img-ask.csdn.net/upload/201907/27/1564207065_980095.png) 数据是复制到dataGridview然后从里面获取的

请教纯win32 C++通过CLR动态库调用WPF方法

查找了C++调用WPF绘制界面的问题。都是直接使用CLR工程通过HwndSource调用WPF工程的。 有没有方法实现间接调用WPF的呢? 我们不想修改现有的C++工程的编译设置。 现在我们已经有一个纯C++的win32工程。我们想使用WPF来重绘窗口。为此我们创建了WPFUI.dll(C#工程) 和WPFWrap.dll(CLR工程)。 其中WPFWrap.dll中提供方法 extern “C”DLL_API HWND CreateMainView(HWND parent) { HwndSourceParamter ^hwndParam = gcnew HwndSourceParamters; hwndParam->WindowsStyle = WS_VISIBLE | WS_CHILD; hwndParam->ParamWindow = IntPtr(parent); .... HndSource ^source = gcnew HwndSource(*hwndParam); Grid ^grid = gcnew Grid; <---调用提示“调用线程必须为STA,因为许多UI组件都需要” IMamagerProvider ^mp = ManagerSingleton::Instance; MainView ^editorView = mp->MainView; grid->Children->add(editorView); source->RootVisual = grid; return (HWND)source->Handle.ToPointer(); } C++中按照通常的调用dll的方式调用以上方法。 HMODULE hDll = LoadLibrary("WPFWrap.dll"); if(hDLL) pfnCreateMainView = (CreateMainView) GetProcAddress(hDll, "CreateMainView"); pfnCreateMainView(this->hWnd); 刚接触CLR,C#, WPF不久。大家有没有这样的情况,或者建议。可以在不改变已有C++工程的情况下,完成上面的调用。 谢谢

c#,winform,启动时Application.Run(new Form1())报错

winform的图如下 ![图片说明](https://img-ask.csdn.net/upload/201608/08/1470647752_483698.png) 报错信息如下,抛出了Win32Exception ![图片说明](https://img-ask.csdn.net/upload/201608/08/1470647668_909727.png) ![图片说明](https://img-ask.csdn.net/upload/201608/08/1470647676_921666.png) 窗体代码如下 ``` public partial class Form1 : Form { [DllImport("C:\\Users\\Dell-pc\\Desktop\\ConsoleApplication1\\Debug\\ConsoleApplication1.dll")] protected static extern bool BeginHook(); [DllImport("C:\\Users\\Dell-pc\\Desktop\\ConsoleApplication1\\Debug\\ConsoleApplication1.dll")] protected static extern bool FinishHook(); string str=""; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { BeginHook(); } private void button2_Click(object sender, EventArgs e) { FinishHook(); } protected override void WndProc(ref System.Windows.Forms.Message msg) { str = str + msg.WParam + "\n"; label1.Text = str; } } ``` 这里导入了自己写的dll dll的cpp文件代码 ``` #include "stdafx.h" #include "ConsoleApplication1.h" #include <windows.h> HMODULE hThisDllModule; #pragma data_seg("test") HHOOK hHook=NULL; HWND hMainWindow=NULL; #pragma data_seg() LRESULT CALLBACK HandleHookMessage(int nCode, WPARAM wParam, LPARAM lParam) { PostMessage(hMainWindow, nCode, wParam, lParam); return ::CallNextHookEx(hHook, nCode, wParam, lParam); } CONSOLEAPPLICATION1_API BOOL WINAPI BeginHook() { hHook=::SetWindowsHookEx(WH_KEYBOARD, HandleHookMessage, hThisDllModule, 0); return true; } CONSOLEAPPLICATION1_API BOOL WINAPI FinishHook() { return ::UnhookWindowsHookEx(hHook); } ``` dll的h文件 ``` #ifdef CONSOLEAPPLICATION1_EXPORTS #define CONSOLEAPPLICATION1_API __declspec(dllexport) #else #define CONSOLEAPPLICATION1_API __declspec(dllimport) #endif CONSOLEAPPLICATION1_API BOOL WINAPI BeginHook(); CONSOLEAPPLICATION1_API BOOL WINAPI FinishHook(); ``` 用了def文件 ``` LIBRARY EXPORTS BeginHook FinishHook SECTIONS test Read Write Shared ``` 代码如上,这个应该是窗体代码中有哪里出错了所以启动不了窗体,但是我看不出哪里出错了,求大神指点指点

关于c++ windows窗体应用程序 的未将对象引用设置到对象实例的问题

程序编译成功后却无法弹出窗口来 调试之后发现卡在了imagelist的地方 不知道是索引的问题呢还是什么问题 求大神不吝赐教 十分感谢!!! ![图片说明](https://img-ask.csdn.net/upload/201706/14/1497419588_53100.png) 程序是模拟狼吃羊的游戏 因为代码太长了就不全部贴出来了 应该涉及到的: ``` void World::setGridSize(int gridsize) { this->gridSize=gridsize; int i,j; for (i=0; i<this->gridSize; i++) { for (j=0; j<this->gridSize; j++) { grid[i][j]=NULL; } } } ``` ``` void display() { for (int i=0; i<world.getGridsize(); i++) { for ( int j=0; j<world.getGridsize(); j++) { gPic[i,j]->Image=this->gImageList->Images[world.Display(i,j)]; } } } ``` ``` int World::Display(int i,int j) { if (grid[i][j]==NULL) return 1; else if (grid[i][j]->getType()==SHEEP) return 2; else return 0; } ``` 图片数组: ![图片说明](https://img-ask.csdn.net/upload/201706/14/1497419534_860613.png) ``` private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { //初始化界面 gImageList = gcnew ImageList; gImageList->ImageSize =System::Drawing::Size(48,48); gImageList->Images->Add( Image::FromFile( "F://C_project//WAS//614//WolfandSheep//WolfandSheep//Wolf.jpg" ) ); //索引0代表狼 gImageList->Images->Add( Image::FromFile( "F://C_project//WAS//614//WolfandSheep//WolfandSheep//Grass.jpg" ) );//索引1代表草 gImageList->Images->Add( Image::FromFile( "F://C_project//WAS//614//WolfandSheep//WolfandSheep//Sheep.jpg" ) );//索引2代表羊 RandGrid(); } ```

vc调用webservice时,如何引入interceptor

已经把需要调用的wsdl添加到web reference了,下面的程序也是可以跑起来,但是所调用的web service需要interceptor进行校验,如何在以下的代码中加入interceptor呢? extern "C" ACCOUNTWS_API int WINAPI test(const wchar_t* echostr, wchar_t* returnval, size_t len) { int res = ERR_SUCCESS; try { System::String^ sParam = gcnew System::String(echostr); WebReference::AccountServiceService ass; System::String^ sRes = ass.test(sParam); pin_ptr<const wchar_t> wch = PtrToStringChars(sRes); wcscpy_s(returnval, len, wch); } catch (System::Exception^ error) { res = ERR_AUTH_ERROR; } return res; }

寻求大神指点,如何将MFC对话框作为.net 中 winForm的父窗体

问题是这样的: 在建立的MFC对话框工程中,使用.NET与MFC互操作,在一个MFC的对话框CMFC_C_CLIDemoDlg 中显示一个.net的form窗体frm,由于需要显示成非模态对话框样式的Form,所以使用了frm->Show();的方法。 但是这样创建的窗体frm在失去焦点后,窗体就消失了(不显示在对话框的上层),经过测试发现,是因为在frm->Show()显示窗体时,没有指定对话框为它的父窗体。但是这里如何将MFC的CDailog类型的对话框CMFC_C_CLIDemoDlg 指定为Form类型的窗体frm的父窗体呢? 如果不能指定,还有什么办法使frm失去焦点后,仍然显示在对话框的上层? 代码如下: // CMFC_C_CLIDemoDlg 对话框 class CMFC__C_CLIDemoDlg : public CDialog { // 构造 public: CMFC__C_CLIDemoDlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 enum { IDD = IDD_MFC__C_CLIDEMO_DIALOG }; ``` ``` }; namespace MFC__C_CLIDemo { public ref class WinForm : public System::Windows::Forms::Form { public: WinForm(void) { InitializeComponent(); // //TODO: 在此处添加构造函数代码 // } ``` ``` } //在MFC对话框中显示form窗体 void CMFC__C_CLIDemoDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 WinForm ^frm=gcnew WinForm; //frm->ShowDialog(); frm->Show(); }

C++崩溃的问题,关于空间的一个问题

是这样的情况: 我重写了项目中的日志模块,自己开辟空间进行信息存储,装满唤醒写入到TXT的线程, 但是出现了一个很奇怪的问题: 我循环打印10000次,开始设置开辟空间200000,但是这样程序会在一百多次循环之后崩溃。 我将空间减小到了10000,结果不会崩溃了。 所有的空间我都是new来进行开辟的。 程序中设置了一个不大的对象进行空间管理。 因为项目很大,请原谅我没有办法将代码贴出来, 我想请问各位大佬,您觉得什么情况下可能出现这样的问题。

c++/CLR dll调用问题(一个很神奇的问题,望解答)

目前遇到一个很奇怪的问题。 创建控制台程序CLR console application ,添加该dll和lib(工程属性中添加lib目录及名称,dll放到dedug文件夹下),编译通过,完全没有问题 创建windows Forms application,用同样方法添加dll和lib,编译出错,出错地方就是调用的dll函数不成功。 dll代码如下 //h文件 #if !defined(_FTDCTRADERAPI_H) #define _FTDCTRADERAPI_H #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ThostFtdcUserApiStruct.h" #if defined(ISLIB) && defined(WIN32) #ifdef LIB_TRADER_API_EXPORT #define TRADER_API_EXPORT __declspec(dllexport) #else #define TRADER_API_EXPORT __declspec(dllimport) #endif #else #define TRADER_API_EXPORT #endif class TRADER_API_EXPORT CThostFtdcTraderApi { public: static CThostFtdcTraderApi *CreateFtdcTraderApi(const char *pszFlowPath = ""); }; 控制台程序,成功运行 #include "stdafx.h" #include ".\ThostTraderApi\ThostFtdcTraderApi.h" using namespace System; int main(array<System::String ^> ^args) { CThostFtdcTraderApi* aa=CThostFtdcTraderApi::CreateFtdcTraderApi(); return 0; } winform程序 // 2.cpp : main project file. #include "stdafx.h" #include "Form1.h" #include ".\ThostTraderApi\ThostFtdcTraderApi.h" using namespace My2; [STAThreadAttribute] int main(array<System::String ^> ^args) { // Enabling Windows XP visual effects before any controls are created Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); CThostFtdcTraderApi* aa=CThostFtdcTraderApi::CreateFtdcTraderApi(); // Create the main window and run it Application::Run(gcnew Form1()); return 0; } 报错 error LNK2028: unresolved token (0A00000F) "public: static class CThostFtdcTraderApi * __clrcall CThostFtdcTraderApi::CreateFtdcTraderApi(char const *)" (?CreateFtdcTraderApi@CThostFtdcTraderApi@@$$FSMPAV1@PBD@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)我尝试去掉该lib会出现同样的错误,即在winform下调用失败了 产生了两个问题: 1、如何才能在winform下成功调用该lib和dll 2、个人猜想其调用失败是不是h头文件没有说明,即该段 #if !defined(_FTDCTRADERAPI_H) #define _FTDCTRADERAPI_H #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ThostFtdcUserApiStruct.h" #if defined(ISLIB) && defined(WIN32) #ifdef LIB_TRADER_API_EXPORT #define TRADER_API_EXPORT __declspec(dllexport) #else #define TRADER_API_EXPORT __declspec(dllimport) #endif #else #define TRADER_API_EXPORT #endif 如何更改? 3、我尝试建立了win32,MFC工程,均能成功编译。这个到底是怎么回事,求高手解答。

为啥在DEVC++能运行,VS2019却报错?(来源poj北大郭炜老师:全面的MyString)

#include <cstdlib> #include <iostream> using namespace std; int strlen(const char * s) //求长度 { int i = 0; for(; s[i]; ++i); return i; } void strcpy(char * d,const char * s) //复制字符串并将最后一个字符变成‘\0’ { int i = 0; for( i = 0; s[i]; ++i) d[i] = s[i]; d[i] = 0; } int strcmp(const char * s1,const char * s2) //比较较短长度中每个字符大小 { for(int i = 0; s1[i] && s2[i] ; ++i) { if( s1[i] < s2[i] ) return -1; else if( s1[i] > s2[i]) return 1; } return 0; } void strcat(char * d,const char * s) //连接字符串 { int len = strlen(d); strcpy(d+len,s); } class MyString { // 在此处补充你的代码 char *ptr; public: MyString(char *p){ ptr = new char[strlen(p)+1]; strcpy(ptr,p); } MyString(){ //数组不要定义为NULL ptr = new char[2]; ptr[0] = 0; } MyString (const MyString &r){ if(r.ptr==NULL) return; // if(ptr) delete []ptr; ptr = new char[strlen(r.ptr)+1]; strcpy(ptr,r.ptr); } MyString & operator =(char *p){ if(ptr) delete []ptr; ptr = new char[strlen(p)+1]; strcpy(ptr,p); return *this; } friend ostream & operator <<( ostream &os,const MyString &r){ os<<r.ptr; return os; } MyString & operator =(const MyString &r){ if(ptr==r.ptr) return *this; if(ptr) delete []ptr; ptr = new char[strlen(r.ptr)+1]; strcpy(ptr,r.ptr); return *this; } MyString operator +(const MyString &r){ //不加const 会报错 char *tmp = new char[strlen(ptr)+strlen(r.ptr)+2]; //strlen()不包括'\0',但strcat()和strcpy()包括'\0' strcpy(tmp,ptr); strcat(tmp,r.ptr); MyString t(tmp); delete []tmp; return t; } char & operator [](int i){ return ptr[i]; } MyString & operator +=(const char *p){ char *tmp = new char[strlen(ptr)+strlen(p)+2]; strcpy(tmp,ptr); strcat(tmp,p); delete []ptr; ptr = tmp; return *this; } friend MyString operator +(const char *p,const MyString &r){ char *tp = new char[strlen(p)+strlen(r.ptr)+2]; strcpy(tp,p); strcat(tp,r.ptr); MyString tmp(tp); delete []tp; return tmp; } MyString operator ()(int start,int len){ char *p = new char[len+1]; for(int i=0;i<len;++i) p[i] = ptr[i+start]; p[len] = 0; MyString tmp(p); delete []p; return tmp; } friend bool operator <(const MyString &r1,const MyString &r2){ return strcmp(r1.ptr,r2.ptr) <0; } friend bool operator >(const MyString &r1,const MyString &r2){ return strcmp(r1.ptr,r2.ptr) >0; } friend bool operator ==(const MyString &r1,const MyString &r2){ return strcmp(r1.ptr,r2.ptr) ==0; } ~MyString(){ if(ptr) delete []ptr; } }; int CompareString( const void * e1, const void * e2) //比较字符串大小 { MyString * s1 = (MyString * ) e1; MyString * s2 = (MyString * ) e2; if( * s1 < *s2 ) //重载< > == return -1; else if( *s1 == *s2) return 0; else if( *s1 > *s2 ) return 1; } int main() { MyString s1("abcd-"),s2,s3("efgh-"),s4(s1); //构造函数、复制构造函数 MyString SArray[4] = {"big","me","about","take"}; //“=”重载(字符换和对象) cout << "1. " << s1 << s2 << s3<< s4<< endl; //“<<”重载 s4 = s3; //“=”重载 (对象与对象) s3 = s1 + s3; //“+”重载 cout << "2. " << s1 << endl; cout << "3. " << s2 << endl; cout << "4. " << s3 << endl; cout << "5. " << s4 << endl; cout << "6. " << s1[2] << endl; //“[]”重载 s2 = s1; s1 = "ijkl-"; s1[2] = 'A' ; cout << "7. " << s2 << endl; cout << "8. " << s1 << endl; s1 += "mnop"; //“+=”重载 cout << "9. " << s1 << endl; s4 = "qrst-" + s2; //"+"重载 cout << "10. " << s4 << endl; s1 = s2 + s4 + " uvw " + "xyz"; cout << "11. " << s1 << endl; qsort(SArray,4,sizeof(MyString),CompareString); //qsort函数 ->系统自带 for( int i = 0;i < 4;i ++ ) cout << SArray[i] << endl; //s1的从下标0开始长度为4的子串 cout << s1(0,4) << endl; //()的重载 //s1的从下标5开始长度为10的子串 cout << s1(5,10) << endl; return 0; } ``` ```

VS2010 CLR的窗口Paint事件函数怎么不执行

初学者 对着书写这个简单的代码 #pragma endregion private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { Pen^my=gcnew Pen(Color::Black); e->Graphics->DrawLine(my,0,0,100,100); } 本来应该画一条线 为什么没有执行/

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

将一个接口响应时间从2s优化到 200ms以内的一个案例

一、背景 在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧… 本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。 二、步骤 2.1 定位 定位性能瓶颈有两个思路,一个是通过工具去监控,一个是通过经验去猜想。 2.1.1 工具监控 就工具而言,推荐使用 arthas ,用到的是 trace 命令 具体安装步骤很简单,大家自行研究。 我的使用步骤是...

学历低,无法胜任工作,大佬告诉你应该怎么做

微信上收到一位读者小涛的留言,大致的意思是自己只有高中学历,经过培训后找到了一份工作,但很难胜任,考虑要不要辞职找一份他能力可以胜任的实习工作。下面是他留言的一部分内容: 二哥,我是 2016 年高中毕业的,考上了大学但没去成,主要是因为当时家里经济条件不太允许。 打工了三年后想学一门技术,就去培训了。培训的学校比较垃圾,现在非常后悔没去正规一点的机构培训。 去年 11 月份来北京找到了一份工...

JVM内存结构和Java内存模型别再傻傻分不清了

JVM内存结构和Java内存模型都是面试的热点问题,名字看感觉都差不多,网上有些博客也都把这两个概念混着用,实际上他们之间差别还是挺大的。 通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关,本文针对这两个总是被混用的概念展开讲解。 JVM内存结构 JVM构成 说到JVM内存结构,就不会只是说内存结构的5个分区,而是会延展到整个JVM相关的问题,所以先了解下

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Google 与微软的浏览器之争

浏览器再现“神仙打架”。整理 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)从 IE 到 Chrome,再从 Chrome 到 Edge,微软与...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

立即提问
相关内容推荐