Java如何访问字符串指针?(调用dll) 5C

用java调用dll,接口函数:int SsmGetCallerId(int ch, LPSTR szCallerId)

参数说明:
ch 通道编号
szCallerId 存放主叫号码基本信息的字符串指针,由应用程序分配存储空间,大小不小于 255 字节

请问如何读取szCallerId的值?

2个回答

Createponiter

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java(JNA/JNative/JNI等)怎样调用 DLL 中 返回 指针 的函数 得到指针值?
<p><strong>JAVA</strong>(JNA/JNative/JNI等)怎样调用<strong><span style="color: blue;">DLL</span></strong>中 <span style="color: #ff0000;">返回指针</span>的函数(指针函数),得到<strong>其值</strong>(其指针对应的值)<strong>?</strong></p> <p>以下给出其它语言的调用示例:</p> <p> </p> <p>//////////////////////////////////////////////////////////////////////////////////////////</p> <p> </p> <p><strong>vb中的调用方式:</strong><br /><br />Private Declare Function functionA Lib "mydll.dll" (ByVal a As Long, ByVal  b As Long, ByVal c As String, d As Long) As Long<br /><br />jieguo = "    "<br />no1 = functionA(0,0,strA,0) '返回识别结果字符的指针<br />no2 = lstrcpy(jieguo, no1) 'VB中用lstrcpy就可以从指针得到字符了,当然你也可以选择其他的方式</p> <p> </p> <p>我要的就是<strong> <em>jiegou</em></strong><br /><br />///////////////////////////////////////////////////////////////////////////////////////////</p> <p><br /><strong>vc中的调用:</strong><br /><br />char* WINAPI functionA(...)<br />    Def_API(tag_functionA, functionA, "mydll.dll")<br /><br />char* ret = functionA(...);<br /><br />我要的就是 <strong>ret</strong>字符串</p> <p> </p> <p>///////////////////////////////////////////////////////////////////////////////////////////</p> <p> </p> <p><span style="color: #ff0000;">那JAVA中怎样来调用呢</span>,DLL我是没办法更改的!试过用JNative、JNA调用,都没有调用<strong>指针函数</strong>的示例.自己用<strong>C</strong>写一个DLL<strong>间接</strong>调用估计可以,但C写DLL不会...</p>
DLL 中new了一个字符串,PostMessage发送给主程序,主程序处理了数据后delete时崩溃
DLL 中new了一个字符串,调用PostMessage发送给主程序,主程序处理了数据后delete 当主程序和dll都用vs2010编译(v100)时,不会崩溃, 当主程序和dll都用vs2017编译(v141)时,也不会崩溃, 当主程序用vs2010编译(v100),dll用vs2017编译(v141)时,就会崩溃, 出错的地方: \_ASSERTE(_CrtIsValidHeapPointer(pUserData)); 注释: * If this ASSERT fails, a bad pointer has been passed in. It may be * totally bogus, or it may have been allocated from another heap. * The pointer MUST come from the 'local' heap. 好像是说delete的指针不是本地堆内存
有关DLL中申请的内存在外部释放的问题。
具体情况是这样的,我有应用程序,调用了一个DLL。在DLL中有一个函数,返回一个字符串指针,使用完了之后在应用程序中释放这个字符串指针。 在应用程序和DLL用同一个版本的VS编译的时候,调用是没有问题的。 当我用VS2010编译的应用程序去调用用VS2013编译的DLL时,在释放这个指针的时候应用程序就崩溃了。 有大婶知道这是怎么回事吗?
Visula Basic 6.0语言调用C++ struct结构体中的字符串问题
VB6调用C++ DLL结构体struct中的字符串,内存预分配的写法是什么,内存回收怎么做?VB不能用指针的谢谢
C#调用c++的dll执行带字符串参数的函数时遇到的问题
我在c++项目中实现函数: extern "C" __declspec(dllexport) int FUNC1(const char* xmlSta, char* fileOut) { return 0; } 然后编译成动态库a.dll,并在C#项目中引用, 用静态加载的方式,是可以运行的,代码如下(只写调用的部分): [DllImport("a.dll", EntryPoint = "FUNC1", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] public static extern int FUNC1(string xmlSta, StringBuilder fileOut); StringBuilder sbr = new StringBuilder(10); int r1 = FUNC1("abc ", sbr); //可以运行! 但是用动态加载的方式,却报错,代码如下: public static class NativeMethod { [DllImport("kernel32.dll", EntryPoint = "LoadLibrary")] public static extern int LoadLibrary( [MarshalAs(UnmanagedType.LPStr)] string lpLibFileName); [DllImport("kernel32.dll", EntryPoint = "GetProcAddress")] public static extern IntPtr GetProcAddress(int hModule, [MarshalAs(UnmanagedType.LPStr)] string lpProcName); [DllImport("kernel32.dll", EntryPoint = "FreeLibrary")] public static extern bool FreeLibrary(int hModule); } /// <summary> /// 函数指针 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> delegate int FUNC1(string xmlSta, StringBuilder fileOut); class Program { static void Main(string[] args) { StringBuilder sbr = new StringBuilder(10); //1. 动态加载C++ Dll int hModule = NativeMethod.LoadLibrary(@"a.dll"); if (hModule == 0) return; //2. 读取函数指针 IntPtr intPtr = NativeMethod.GetProcAddress(hModule, "FUNC1"); //3. 将函数指针封装成委托 FUNC1 cFUNC1 = (FUNC1)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(FUNC1)); //4. 测试 Console.WriteLine(cFUNC1("abc ", sbr)); Console.Read(); } } 报错信息是:托管调试助手“PInvokeStackImbalance”在“E:\WCF\CPP\bin\test.vshost.exe”中检测到问题。 其他信息: 对 PInvoke 函数“test!test.FUNC1::Invoke”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。 两种方式不都一样吗?为什么第二种方式会报错?因为第一种方式有时运行很慢,要等很久,所以我想用第二种方式在程序启动时先LoadLibrary,之后就不会出现很慢的情况,但是第二种方式总是出错,只有在参数没有字符串类型的情况下才能运行,但是确实需要传字符串参数,哪位高手能够给个指点,代码该如何修改呢?
C#调用dll,使用intPtr接收char*返回值不一致
在C#中调用C的dll,遇到char* 使用 intPtr接收,返回值与C中char 指针不一致 C结构体 typedef struct { BYTE ErrCode; int* errstring; } ERRPARAMS; 函数 BYTE DSCUDAPICALL dscGetLastError(ERRPARAMS* errparams); C#结构体 [StructLayout(LayoutKind.Sequential)] public struct ERRPARAMS { public byte ErrCode; public IntPtr errstring; } 函数 [DllImport("dscud.dll", EntryPoint = "dscGetLastError", CharSet = CharSet.Unicode, SetLastError = false, CallingConvention = CallingConvention.Cdecl)] extern unsafe public static byte dscGetLastError(ERRPARAMS* errparams); 执行结果: 在C中 ErrCode是5 errstring是0x1007eb80 可以转换成字符串 在C#中 ErrCode是5 errstring是0x00000010 使用Marshal.PtrToStringAnsi转换为空,不是想要的地址 将intPtr改成string/String/StringBuilder/char[]都试过了,函数会报内存异常的错误。 且大神解答,非常感谢。
LabView中调用MFC-Wizard生成的DLL实现自定义文件对话框功能出错
VC创建MFC-Wizard生成的Dll,在导出函数MyFileOpen中调用由CFileDialog派生类CMyFileDlg实现自定义文件对话框。再在LabView中引用库函数节点调用MFC生成的DLL,输入输出参数设置输入类型int32、输出为C字符串指针即为文件对话框返回的选中目标文件路径。 如上配置完成后,运行弹出1097错误,用error_out屏蔽后,返回路径没有输出结果。DLL调试执行MyFileOpen内的如下代码中 __declspec(dllexport) void MyFileOpen(int* nMode,char* path) { if(*nMode==0) { CMyFileDlg dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, NULL,NULL); dlg.m_ofn.lpstrFilter="Chart Files (*.*)\0*.*\0"; // dlg.m_ofn.lpstrInitialDir="D:\\VC6.0完整\\VC98\\MFC\\Include"; // dlg.OnInitDialog(); if(dlg.DoModal()==IDOK) { //strcat(path,"000"); CString str=dlg.GetFileName(); //???执行没有效果 path=str.GetBuffer(str.GetLength()); *nMode =1; } else { *nMode =2; strcat(path,"000"); return ; } } else { *nMode =2; } return ; } str=dlg.GetFileOpen();没有效果。 求懂LabView和MFC的大神求解,第一次使用LabView调用MFC的动态链接库就出错了
显式加载的dll怎么访问exe里的对象?
我的问题,简单的说是:dll里的一个对象,要访问exe里一个对象的某个数据。通过debug,发现这个数据在exe里时是对的,但是跟踪到dll的函数时,发现数据乱掉了,是错误的数据,并且数据的地址不一样。 有谁遇到过这样的问题吗?请不吝赐教,谢谢! 我的可执行程序里有个App对象,App对象有个结构体m_info。 m_info里有2个 char aa[41]; char bb[41]; 字段 可执行程序显式加载mydll.dll,mydll里有个从纯虚类MyApi继承来的类MyApiImpl。 我的可执行程序创建了纯虚类的指针 pMyApi。可执行程序用mydll.dll导出的一个函数,创建了MyApiImpl实例,然后赋值给 pMyApi。 我调用pMyApi.Init(pApp),我在pMyApi.Init()函数里,访问了pApp的m_info结构体的aa和bb,发现数据是乱的——不是exe里设置的字符串。我得到的现象是: (1)exe程序在调用pMyApi.Init(pApp)之前,我查看pApp,m_info的内容是正常的。 (2)我跟踪进pMyApi.Init(pApp),发现pApp->m_info的内容是错的。 (3)通过对比,我发现pApp->m_info.app字符串的地址,在调用前(exe里)和pMyApi.Init(pApp)函数内部,是不同的。
VS2013 应用程序无法启动0xC000007B
VS2013 X86 WIN7 编译程序通过,运行的时候提示缺少hal.dll文件,从system32复制hal文件过来,提示0xC000007B无法程序启动,之后放到xp环境在内核调试模式下发现程序通过KiCallInitRoutine调用hal文件的入口函数,而这个入口函数会检测TEB+1C处的EnvironmentPointer指针,比较[environmentpointer+51]处的一字节是否为0,行为此处的指针为0,所以导致访问了 [0x00000051]出现访问违例。 不明白为什么会出现这样的错误,程序因为要调用内核字符串函数,所以在源程序中包含了ntoskrnl.lib,希望大牛们指点一下
关于FORTRAN调用matlab出现问题,无从下手,跪求大神指点!
首先说明,我用的是VS2008平台,intel fortran安装在该平台下,matlab为2010a版本 。调用了matlab中的libeng.lib libmat.lib libmex.lib libmx.lib库文件。程序可以编译,但是运行时候出错。代码 !!matlab函数调用模块 !!!!! module matlab implicit none integer ep !指针,用于指向打开的matlab integer mstatus !非指针,记录命令执行的结果是否有效 integer,external::engOpen,engPutVariable,engGetVariable,engEvalString,engClose integer,external::mxCreateDoubleMatrix,mxGetPr contains !!====================================== !!打开matlab应用程序 subroutine startmatlab() implicit none write(*,*)"正在打开matlab应用程序,请稍后......." ep = engOpen('matlab') if(ep==0)then write(*,*)"未能打开matlab应用程序,程序结束" stop else write(*,*)"成功打开matlab应用程序窗口" endif endsubroutine startmatlab !!=================================== !!关闭matlab应用程序 subroutine closematlab() implicit none write(*,*)"正在关闭matlab窗口,请稍后......" mstatus = engClose(ep) if(mstatus /=0 )then write(*,*)"未能关闭matlab程序窗口,程序结束" stop else write(*,*)"成功关闭matlab的程序窗口" endif endsubroutine closematlab !!======================================== !!在matlab中执行命令 subroutine mc(string) implicit none character(*) string print *,"正在matlab中计算语句: ",string if(engEvalString(ep,string) /=0 )then !!!engEvalString发送命令让 Matlab 执行,参数 ep 为函数 engOpen 返回的引擎指针,字符串 string 为要 matlab 执行的命令。 write(6,*) 'engEvalString failed' stop endif endsubroutine mc !!========================================== !!将fortran中的矩阵送到matlab中去 subroutine f2m(fdata,mstring,row,col) implicit none integer row,col real(8) fdata(1:row,1:col) character(*)mstring integer ptemp ptemp = mxCreateDoubleMatrix(row,col,0) !!!mxCreatDoubleMatrix新建一个double 类型数组 if(ptemp==0)then write(*,*)"无法申请内存" stop endif call mxCopyReal8ToPtr(fdata,mxGetPr(ptemp),row*col) !!!mxCopyReal8ToPtr将一个Fortran语言的实数类型数组中的数据复制到某个阵列的实数部分或虚数部分中。 !!!fdata为fortran语言的实数类型数组 !!!mxGetPr(ptemp)为指向某个阵列的实数或虚数部分的数据的指针;mxGetPr用来获取矩阵指针 !!!row*col为希望复制的元素的个数 mstatus = engPutVariable(ep,mstring,ptemp) !!!向 Matlab 引擎工作空间写入变量。 call mxDestroyArray(ptemp) !!!释放内存 print *,"正在matlab中生成矩阵: ",mstring if(mstatus /= 0)then !!成功返回0 write(*,*) 'engPutVariable failed' stop endif endsubroutine f2m !!============================================== !!将matlab中的矩阵输入到Fortran中 subroutine m2f(mstring,ddata,row,col) integer row,col real(8) ddata(row,col) character(*)mstring integer ptemp ptemp = engGetVariable(ep,mstring) !!!获得当前 Matlab 窗口的显示 / 隐藏情况,可以调用函数: call mxCopyPtrToReal8(mxGetPr(ptemp),ddata,row*col) endsubroutine m2f endmodule !!================================================= !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! program main use matlab implicit none integer,parameter :: ndata=10 real(8) x(ndata),y(ndata),z(ndata) integer m !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!给x和y赋值 do m=1,ndata x(m)=3.1415926587*(m-1)/(ndata-1) y(m)=sin(x(m)) enddo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!打开matlab !call startmatlab() !!将x和y输出到matlab call f2m(x,"x",1,ndata) call f2m(y,"y",1,ndata) !!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!在matlab中画图 call mc("plot(x,y);title('y=sin(x)';xlable('x');ylable('y'))") !!在matlab中计算 call mc("z=2*y") !!将计算结果输出到fortran call m2f("z",z,1,ndata) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!在fortran中打印结果 print *," x "," y " ," z " do m=1,ndata write(*,"(G15.6,G15.6,G15.6)") x(m),y(m),z(m) enddo end program main 出错时指向 cookie = systime.ft_struct.dwLowDateTime; cookie ^= systime.ft_struct.dwHighDateTime; 错误信息:“matlabtest.exe”: 已加载“C:\Windows\System32\ntdll.dll” “matlabtest.exe”: 已加载“C:\Windows\System32\kernel32.dll” “matlabtest.exe”: 已加载“C:\Windows\System32\KernelBase.dll” matlabtest.exe 中的 0x000db346 处最可能的异常: 0xC0000005: 读取位置 0x000db346 时发生访问冲突 matlabtest.exe 中的 0x000db346 处未处理的异常: 0xC0000005: 读取位置 0x000db346 时发生访问冲突 。该怎么处理?求大神指点?先行谢过。 在线等答案。
mfc通过ado连接access 老是无效指针,求高手指点
// Snake.cpp : 定义应用程序的类行为。 // #include "stdafx.h" #include "afxwinappex.h" #include "afxdialogex.h" #include "Snake.h" #include "MainFrm.h" #include "winsock2.h" #include "SnakeDoc.h" #include "SnakeView.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CSnakeApp BEGIN_MESSAGE_MAP(CSnakeApp, CWinAppEx) ON_COMMAND(ID_APP_ABOUT, &CSnakeApp::OnAppAbout) // 基于文件的标准文档命令 ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew) ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen) END_MESSAGE_MAP() // CSnakeApp 构造 CSnakeApp::CSnakeApp() { m_bHiColorIcons = TRUE; // 支持重新启动管理器 m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS; #ifdef _MANAGED // 如果应用程序是利用公共语言运行时支持(/clr)构建的,则: // 1) 必须有此附加设置,“重新启动管理器”支持才能正常工作。 // 2) 在您的项目中,您必须按照生成顺序向 System.Windows.Forms 添加引用。 System::Windows::Forms::Application::SetUnhandledExceptionMode(System::Windows::Forms::UnhandledExceptionMode::ThrowException); #endif // TODO: 将以下应用程序 ID 字符串替换为唯一的 ID 字符串;建议的字符串格式 //为 CompanyName.ProductName.SubProduct.VersionInformation SetAppID(_T("Snake.AppID.NoVersion")); // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CSnakeApp 对象 CSnakeApp theApp; // CSnakeApp 初始化 BOOL CSnakeApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinAppEx::InitInstance(); AfxEnableControlContainer(); AfxOleInit(); m_pConnection.CreateInstance(__uuidof(Connection)); // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息, // 因为它有时会经常出现一些想不到的错误。 try { // 打开本地Access库Demo.mdb m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb", "", "", adModeUnknown); } catch (_com_error& e) { //调用在CAdoRWAccessDlg中打印错误信息的静态函数 //CAboutDlg::dump_com_error(e); return FALSE; } // 初始化 OLE 库 /*if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; }*/ AfxEnableControlContainer(); EnableTaskbarInteraction(FALSE); // 使用 RichEdit 控件需要 AfxInitRichEdit2() // AfxInitRichEdit2(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, SetRegistryKey(_T("应用程序向导生成的本地应用程序")); LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU) InitContextMenuManager(); InitKeyboardManager(); InitTooltipManager(); CMFCToolTipInfo ttParams; ttParams.m_bVislManagerTheme = TRUE; theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL, RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams); // 注册应用程序的文档模板。文档模板 // 将用作文档、框架窗口和视图之间的连接 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CSnakeDoc), RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口 RUNTIME_CLASS(CSnakeView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); // 分析标准 shell 命令、DDE、打开文件操作的命令行 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // 调度在命令行中指定的命令。如果 // 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。 if (!ProcessShellCommand(cmdInfo)) return FALSE; // 唯一的一个窗口已初始化,因此显示它并对其进行更新 m_pMainWnd->MoveWindow(0,0,645,645,1); m_pMainWnd->CenterWindow(); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); // 仅当具有后缀时才调用 DragAcceptFiles // 在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生 return TRUE; } int CSnakeApp::ExitInstance() { //TODO: 处理可能已添加的附加资源 AfxOleTerm(FALSE); return CWinAppEx::ExitInstance(); } // CSnakeApp 消息处理程序 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; public: void dump_com_error(_com_error &e); _RecordsetPtr m_pRecordset; //_RecordsetPtr m_pRecordset1; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedButton1(); CListBox m_AccessList; }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_AccessList); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTON1, &CAboutDlg::OnBnClickedButton1) END_MESSAGE_MAP() // 用于运行对话框的应用程序命令 void CSnakeApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } void CAboutDlg::dump_com_error(_com_error &e) { CString ErrorStr; _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); ErrorStr.Format(L"\n\tADO Error\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n\n", e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription); //在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息 ::OutputDebugString((LPCTSTR)ErrorStr); #ifdef _DEBUG AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR); #endif } void CAboutDlg::OnBnClickedButton1() { _variant_t var; CString strName, strAge; m_AccessList.ResetContent(); strName = strAge = ""; try { if (!m_pRecordset->BOF) m_pRecordset->MoveFirst(); else { AfxMessageBox(L"表内数据为空"); return; } while (!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("time"); if (var.vt != VT_NULL) strName = (LPCSTR)_bstr_t(var); var = m_pRecordset->GetCollect("score"); if (var.vt != VT_NULL) strAge = (LPCSTR)_bstr_t(var); m_AccessList.AddString(strName + " --> " + strAge); m_pRecordset->MoveNext(); } m_AccessList.SetCurSel(0); } catch (_com_error& e) { dump_com_error(e); } } // CSnakeApp 自定义加载/保存方法 void CSnakeApp::PreLoadState() { BOOL bNameValid; CString strName; bNameValid = strName.LoadString(IDS_EDIT_MENU); ASSERT(bNameValid); GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT); } void CSnakeApp::LoadCustomState() { } void CSnakeApp::SaveCustomState() { } // CSnakeApp 消息处理程序
VB6.0使用iphlpapi.dll,很多的函数返回122,怎么解决?
(122 缓冲区不是足够大) 代码如下 第二节 获取MIB-II 接口表 1、函数: Private Declare Function GetIfTable Lib "iphlpapi.dll" (ByRef pIfTable As MIB_IFTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long 参数说明: pIfTable:[输入]成功的话指向一个MIB_IFTABLE类型的缓冲区。 PdwSize:[输入,输出]指定pIfTable参数所占缓冲区的大小,如果缓冲区不是足够大返回接口表,函数设置这个参数等于所必须的缓冲区大小。 bOrder:[输入]指定返回的接口表是否按接口序号按上升顺序排列。如果参数为TRUE那么按上升顺序排列。 返回值:成功,返回0;失败,返回错误代码。 2、使用到的类型: ①MIB_IFTABLE 包含接口表 Private Type MIB_IFTABLE dwNumEntries As Long '当前网络接口的总数 MIB_Table(9) As MIB_IFROW '指向一个包含MIB_IFROW类型的指针 End Type ②MIB_IFROW 保存接口信息 Private Type MIB_IFROW wszName(0 To 511) As Byte '接口名称的Unicode字符串,必须为512字节 dwIndex As Long '接口编号 dwType As Long '接口类型,参看IP_ADAPTER_INFO类型的Type成员 dwMtu As Long '最大传输单元 dwSpeed As Long '接口速度(字节) dwPhysAddrLen As Long '由bPhysAddr获得的物理地址有效长度 bPhysAddr(0 To 7) As Byte '物理地址 dwAdminStatus As Long '接口管理状态 dwOperStatus As Long '操作状态,以下值之一: 常量名称 值 说明 MIB_IF_OPER_STATUS_NON_OPERATIONAL 0 网络适配器被禁止,例如:地址冲突 MIB_IF_OPER_STATUS_UNREACHABLE 1 没有连接 MIB_IF_OPER_STATUS_DISCONNECTED 2 局域网:电缆未连接;广域网:无载波信号 MIB_IF_OPER_STATUS_CONNECTING 3 广域网适配器连接中 MIB_IF_OPER_STATUS_CONNECTED 4 广域网适配器连接上远程对等点 MIB_IF_OPER_STATUS_OPERATIONAL 5 局域网适配器默认状态 dwLastChange As Long '操作状态最后改变的时间 dwInOctets As Long '总共收到(字节) dwInUcastPkts As Long '总共收到(unicast包) dwInNUcastPkts As Long '总共收到(non-unicast包),包括广播包和多点传送包 dwInDiscards As Long '收到后丢弃包总数(即使没有错误) dwInErrors As Long '收到出错包总数 dwInUnknownProtos As Long '收到后因协议不明而丢弃的包总数 dwOutOctets As Long '总共发送(字节) dwOutUcastPkts As Long '总共发送(unicast包) dwOutNUcastPkts As Long '总共发送(non-unicast包),包括广播包和多点传送包 dwOutDiscards As Long '发送丢弃包总数(即使没有错误) dwOutErrors As Long '发送出错包总数 dwOutQLen As Long '发送队列长度 dwDescrLen As Long ' bDescr部分有效长度 bDescr(0 To 255) As Byte '接口描述 End Type 3、使用到的常量: 无 4、主要代码分析: ①分配足够大的缓存空间,然后直接调用GetIfTable获得接口信息: Dim ifT As MIB_IFTABLE LenIfT = Len(ifT) RValue = GetIfTable(ifT, LenIfT, True) ②由ifT.dwNumEntries获得接口数量,然后用for…next循环获取每个接口信息: For i = 0 To ifT.dwNumEntries - 1 Print "接口编号:" & ifT.MIB_Table(i).dwIndex Print "接口速度:" & ifT.MIB_Table(i).dwSpeed Next ③物理地址的获得: PhysAddr = Right("00" & Hex(ifT.MIB_Table(i).bPhysAddr(0)), 2) For j = 1 To 5 PhysAddr = PhysAddr & "-" & Right("00" & Hex(ifT.MIB_Table(i).bPhysAddr(j)), 2) Next Print "物理地址:" & PhysAddr
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
前后端分离,我怎么就选择了 Spring Boot + Vue 技术栈?
前两天又有小伙伴私信松哥,问题还是职业规划,Java 技术栈路线这种,实际上对于这一类问题我经常不太敢回答,每个人的情况都不太一样,而小伙伴也很少详细介绍自己的情况,大都是一两句话就把问题抛出来了,啥情况都不了解,就要指出一个方向,这实在是太难了。 因此今天我想从我学习 Spring Boot + Vue 这套技术栈的角度,来和大家聊一聊没有人指导,我是如何一步一步建立起自己的技术体系的。 线上大...
17张图带你解析红黑树的原理!保证你能看懂!
二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意结点的...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
MySQL数据库总结
一、数据库简介 数据库(Database,DB)是按照数据结构来组织,存储和管理数据的仓库。 典型特征:数据的结构化、数据间的共享、减少数据的冗余度,数据的独立性。 关系型数据库:使用关系模型把数据组织到数据表(table)中。现实世界可以用数据来描述。 主流的关系型数据库产品:Oracle(Oracle)、DB2(IBM)、SQL Server(MS)、MySQL(Oracle)。 数据表:数...
相关热词 基于c#波形控件 c# 十进制转十六进制 对文件aes加密vc# c#读取栈中所有的值 c# rsa256加密 好 学c# 还是c++ c# 和java的差距 c# curl网络框架 c# https证书请求 c# 中崎
立即提问

相似问题

1
利用指针写一函数,实现一长字符串中两短字符串交换,从主函数输入待替换的长字符串以及替换前后两个子串?
4
java字符串缓冲器问题
1
输入一个字符串,可以删除字符串s中的任意字符,剩下的字符串形成对称字符串,且该字符串为最长对称字符串
7
如何在 Java 中分割字符串?
2
Java如何比较两个字符串里面所有数字的大小
1
Java将字符串反转的写法是什么,如何用swap函数反转字符串
2
Java语言字符串的输出,有没有办法按照字符串的顺序的相反的顺序输出
1
Java判断一个字符串里面是否有一个短一些的字符串,用程序具体编写出来
7
Java悬赏问题,Java语言如何展开字符串:
0
java语言字符串最大能有多大?如果把一本小说放在字符串里面,计算机能承受么
3
不用sql语句。java怎样根据一个时间字符串查询在数据库当天的数据?不用sql语句。
4
java题目:编写一个类,该类的功能是可以根据给定的字符串和子串,计算出字符串中包含多少个子串。
0
Java语言字符串怎么换成一个变量,中间的实现的过程是什么?
3
java 获取2个字符串中间所有的字符串
2
Java语言实现字符串的比较,用==和eques的区别在哪里,怎么使用的?
1
用指针方法实现:输入两个字符串分别存入字符数组中,再将第二个字符串连接到第一个字符串之后并输出(不能
3
Java语言比较字符串大小的规则是什么,为什么10比2还要大?
2
高分悬赏,Java语言实现字符串的排序,怎么写这个程序,运用数组来实现,懂的人来回答
2
Java语言如何将字符串转换成数组,如何将数组转换成字符串
1
Java语言字符串和字符数组的关系和区别是什么?用eclipes的话,一般推荐用什么字符串形式