DLL导出函数调用本地函数,char**参数问题

先上3张图片
图片说明
图片说明
图片说明

图片1是导出函数,图片2是导出函数里面调用了本地函数的代码,可以看到这时候二级指针参数,char ** argv,这时候还是有值的,等我调试到了图片3的函数 argv参数的值就没有了。

这里附上个完整的导出函数代码

 extern "C" __declspec(dllexport) BOOL phadb_exeCmdLine(const char* strCmdLine,char *strOut)
{
    /***************************************************************************************/
    int t = 0;
    int flag = 0, stop = 0, num = 0;

    char argv[ADB_CMDLINEMAX][_MAX_PATH];
    char **pargv = new char *[ADB_CMDLINEMAX];
    for (int i = 0; i<ADB_CMDLINEMAX; i++)
    {
        pargv[i] = new char[_MAX_PATH];

    }

    for (size_t i = 0; i < ADB_CMDLINEMAX; i++) {
        memset(argv[i], 0, _MAX_PATH);
        memset(pargv[i], 0, _MAX_PATH);
    }

    for (size_t i = 0; i < strlen(strCmdLine)/*.size()*/; i++)
    {
        if (strCmdLine[i]/*.at(i)*/ !=  32){
            memcpy(&argv[flag][num], &strCmdLine[t], 1);
            //argv[flag][num] = strCmdLine[t]/*.at(t)*/;
            num++;
            stop = 0;
        }
        else if (strCmdLine[t]/*.at(t)*/ == 32 && stop == 0)
        {
            flag++;
            num = 0;
            stop = 1;
        }t++;
    }
    for (size_t i = 0; i < ADB_CMDLINEMAX; i++){
        memcpy(pargv[i], argv[i], _MAX_PATH);
    }




    int argc = flag;
    BOOL nRet = TRUE;
    if (argc > 0 ){
        nRet = adb_commandline(argc, (char**)argv);
        fread(strOut, 1, 256, stderr);
        if (nRet == FALSE)
        {
            return nRet;
        }

    }
    return nRet;
    /*******************************************************************************************/
}

2个回答

自己把问题解决了,要动态分配二维数组才行。这样以二级指针的方式传入就不会错误了。

//将上面代码的cahr argv[ADB_CMDLINEMAX][MAX_PATH];//修改成如下的 
 char **argv = new char*[MAX_PATH];
 //初始化,动态分配一级指针的内存
 for(int i=0;i<ADB_CMDLINEMAX;i++){
                argv[i] = new char[MAX_PATH];
                memset(argv[i],0,MAX_PATH);
 }

 //完美,By FF00E4 Team  ,Lee

char** 这个一般是在main函数中用的 还有表示二级指针的时候会用到 如果用到的是 字符串数组的话 在VS上最好用list 或者 vector等

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何从用C / C ++编写的DLL调用导出的函数,其返回类型为char *或string?

<div class="post-text" itemprop="text"> <p>We designed C/C++ DLL just like this:</p> <pre><code>WIN32_DLL_EXPORT int FnRetInt(int i) { .... return 32 ; } WIN32_DLL_EXPORT char* FnRetString() { return "THIS IS A TEST STRING" ; } </code></pre> <p>when we invoke these two functions in <code>Go</code> by using syscall:</p> <pre><code>hd:=syscall.NewLazyDLL(dll_path) proc:=hd.NewProc(dll_func_name) ret:=proc.Call() </code></pre> <p>we found:</p> <p><code>FnRetInt</code> worked ok, but <code>FnRetString</code> didn't. <code>proc.Call</code> return type is <code>uintptr</code>, how can we change it to the type we wanted (for exsample: char* or string)?</p> </div>

求助:使用生成的Golang DLL返回字符串或* C.Char

<div class="post-text" itemprop="text"> <p>我一直试图遵循<a href="https://github.com/z505/goDLL" rel="nofollow noreferrer">z505/goDLL</a>的方法,但遇到了一个大问题。该方法无法返回字符串,我无法读取结果的输出变量。</p> <p>这是我目前使用的代码(Go)(完整代码<a href="https://play.golang.org/p/Yfg85DCeMLh" rel="nofollow noreferrer">https://play.golang.org/p/Yfg85DCeMLh</a>):</p> <pre><code>//export PrintHello2 func PrintHello2(Input *C.char, Output **C.char) int32 { fmt.Println(C.GoString(Input)) *Output = C.CString(fmt.Sprintf("From DLL: Hello, %s! ", C.GoString(Input))) fmt.Println("Message: ", C.GoString(*Output)) return 1 } //export PrintHello3 func PrintHello3(Input *C.char, Output *int32) int32 { fmt.Println(C.GoString(Input)) *Output = 3 fmt.Println("Value: ", *Output) return 0 } </code></pre> <p><strong>C# 测试代码:</strong></p> <pre><code>class Program { [DllImport("goDLL.dll", CharSet = CharSet.Unicode)] public static extern int PrintHello2(byte[] data, ref byte[] output); [DllImport("goDLL.dll", CharSet = CharSet.Unicode)] public static extern int PrintHello3(byte[] data, ref int output); static void Main(string[] args) { string res = "demo"; byte[] output = null; Int32 refVal = 0; Console.WriteLine("PrintHello3 Returns: " + PrintHello3(Encoding.UTF8.GetBytes(res), ref refVal)); Console.WriteLine("Ref Val changed to: " + refVal + " "); Console.WriteLine("PrintHello2 Returns: " + PrintHello2(Encoding.UTF8.GetBytes(res), ref output)); Console.WriteLine("Ref Val changed to: " + Encoding.UTF8.GetString(output) + " "); } } </code></pre> <p><em>预期产出结果:</em></p> <pre><code>C:\tmp\DLL&gt;ConsoleApp.exe demo Value: 3 PrintHello3 Returns: 0 Ref Val changed to: 3 demo Message: From DLL: Hello, demo! PrintHello2 Returns: 1 Ref Val changed to: From DLL: Hello, demo! </code></pre> <p><em>实际结果:</em></p> <pre><code>C:\tmp\DLL&gt;ConsoleApp.exe demo Value: 3 PrintHello3 Returns: 0 Ref Val changed to: 3 demo Message: From DLL: Hello, demo! </code></pre> <p>我没有发现错误。</p> </div>

如何正确的导出动态库中的结构体变量

使用开源库封装的dll,它里面的接口需要使用dll中定义的结构体变量作为参数,于是把该变量也一起导出了,但在使用时,对该变量取地址总返回未知的值。大概的代码如下: 头文件定义结构体A,并声明 a变量,另外有一个函数func struct A{}; extern const A a; int func(const A* p ); const A* return_a(); DLL中的 xxx.c文件中定义了a变量和func函数 const A a; int func( const A* p ){ ... } const A* return_a() { return &a; } 定义导出符号的 xxx.def 文件中,添加a和func符号 a func return_a 使用动态库的工程中: func( &a ); VS 调试进 func函数, 发现 p值 和 &a 的值不相等。在监视窗口,a的值又能正确显示..... 之后,在DLL中加入了 return_a 函数,通过 func( return_a() )的方式调用,结果就又正确了.... 这里实在是想不明白,在这里向各位大大求教。

如何在.Cpp程序中调用.c程序中的函数?

我在软件中需要把mp3文件转换成wav文件。为此从网上下载了一个转换程序。但把这些转换程序的文件加入到我的用VC6.0编写的MFC工程中后却发现编译通不过。为此,我把Project Settings中这些文件对应的Precompiled Headers都设置成Not using precompiled headers。这样,编译能通过了。但连接却通不过。我的具体程序和现象如下: 我在我的一个.cpp文件中需要调用如下函数: BOOL mp3ToWav(char* mp3path,char* wavpath,char* rzpath); 我的调用行程序如下: mp3ToWav(mp3path.GetBuffer(1),m_strWavPath.GetBuffer(1),rzpath.GetBuffer(1)); 这个函数在.c文件中定义。这个.c文件内容如下: #include <windows.h> #include <stdio.h> #include "audio.h" #include "mpglib\mpg123.h" #define NO_DLL_FOUND -1 char buf[16384]; struct mpstr mp; extern long freqs[9]; // wfz_added BOOL mp3ToWav(char* mp3path,char* wavpath,char* rzpath) { … } 编译连接时显示如下错误: Linking... WavDlg.obj : error LNK2001: unresolved external symbol "int __cdecl mp3ToWav(char *,char *,char *)" (?mp3ToWav@@YAHPAD00@Z) 请问我该如何设置,才能消除这一错误?恳请赐教!

关于windows中dll调用的问题

我写了一个dll文件,里面有两个导出函数,头文件代码如下。` typedef struct BITMAP_FILE_TAG { BITMAPFILEHEADER bitmapfileheader; BITMAPINFOHEADER bitmapinfoheader; PALETTEENTRY palette[256]; UCHAR *buffer; }BITMAP_FILE,*BITMAP_FILE_PTR; int Load_Bitmap_File(BITMAP_FILE_PTR bitmap,char *filename); int Add(int a,int b); 然后使用.def文件将这两个函数导出,def文件代码如下 LIBRARY "LoadBmpDll" EXPORTS Load_Bitmap_File @1 Add @2 问题就是我调用这个dll种的Add函数时正常,而调用Load_Bitmap_File时编译器报错说无法解析的外部符号!请问这是什么问题啊?

如何用VS2012把一个exe封装成dll并调用?

求助各位大佬,本人小白,刚开始接触编程,用VS2012写了一个小程序,但是现在导师要求我把这个程序封装成一个dll文件,并且要求可以通过网页调用,网页会传送过来四个字符串,我的程序需要根据这四个字符串进行相应的操作。 请问这一点该如何做到。另外我的小程序是UG的外部开发程序,需要在UG安装目录一个特定的文件夹下才能正确运行,不知道这一点会不会有什么影响。 如果可以的话,请各位大佬给我一个详细一点的回答,最好能教我一下其中的原理。 另外这个小程序里面好像不能使用string相关的函数,VS2012总是显示没有指定的类型匹配的重载函数,这个问题也希望能够得到大佬的解答。谢谢! 程序代码如下。 ``` /***************************************************************************** ** ** Tool_Assemble_External.cpp ** ** Description: ** Main file for the application. ** *****************************************************************************/ /* Include files */ #include <stdarg.h> #include <strstream> #include <iostream> using std::ostrstream; using std::endl; using std::ends; using std::cerr; #include <uf.h> #include <uf_ui.h> #include <uf_modl.h> #include <uf_part.h> #include <uf_cfi.h> #include <uf_assem.h> static void ECHO(char *format, ...) { char msg[UF_UI_MAX_STRING_NCHARS+1]; va_list args; va_start(args, format); vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_NCHARS, format, args); va_end(args); printf(msg); UF_print_syslog(msg, FALSE); } #define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X))) static int report_error( char *file, int line, char *call, int irc) { if (irc) { char err[133]; UF_get_fail_message(irc, err); ECHO("*** ERROR code %d at line %d in %s:\n", irc, line, file); ECHO("+++ %s\n", err); ECHO("%s;\n", call); } return(irc); } /* Main routine */ extern void main( char argc, char *argv[] ) { /* Initialize the API environment */ if( UF_CALL(UF_initialize()) ) { /* Failed to initialize */ return; } /* TODO: Add your application code here */ //新建一个一个prt文件 tag_t PartTAG = NULL_TAG; UF_CALL(UF_PART_new("D:\\Program Files\\Siemens\\NX 10.0\\SECONDARY_DEVELOPMENT\\DateBase\\Temp\\Newpart.prt", UF_PART_METRIC, &PartTAG)); printf("第一步,新建一个prt部件!\n"); //导入刀柄 UF_import_part_modes_t modes; modes.layer_mode = 0; modes.group_mode = 0; modes.view_mode = 0; modes.cam_mode = false; double dest_csys0 [ 6 ] = {1.0, 0.0, 0.0, 0.0, 0.0, 1.0}; //由三个坐标值确定的X方向和Y方向,笛卡尔坐标系,确定两个就能确定第三个坐标方向 double dest_point0 [ 3 ] = {0.0, 0.0, 0.0,}; //导入的原点 double scale0 = 1.0; //缩放比例 tag_t group0 = NULL_TAG; UF_CALL(UF_PART_import("D:\\Program Files\\Siemens\\NX 10.0\\SECONDARY_DEVELOPMENT\\DateBase\\ToolBase\\刀柄库\\BT40-ER32-100.prt", &modes, dest_csys0, dest_point0, scale0, &group0)); printf("第二步,导入刀柄\n"); //导入夹套 UF_import_part_modes_t modes1; modes1.layer_mode = 0; modes1.group_mode = 0; modes1.view_mode = 0; modes1.cam_mode = false; double dest_csys1 [ 6 ] = {1.0, 0.0, 0.0, 0.0, 0.0, 1.0}; //由三个坐标值确定的X方向和Y方向,笛卡尔坐标系,确定两个就能确定第三个坐标方向 double dest_point1 [ 3 ] = {0.0, 0.0, 0.0,}; //导入的原点 double scale1 = 1.0; //缩放比例 tag_t group1 = NULL_TAG; UF_CALL(UF_PART_import("D:\\Program Files\\Siemens\\NX 10.0\\SECONDARY_DEVELOPMENT\\DateBase\\ToolBase\\夹套库\\ER32-10.prt", &modes1, dest_csys1, dest_point1, scale1, &group1)); printf("第三步,导入夹套!"); //导入刀杆 UF_import_part_modes_t modes2; modes2.layer_mode = 0; modes2.group_mode = 0; modes2.view_mode = 0; modes2.cam_mode = false; double dest_csys2 [ 6 ] = {1.0, 0.0, 0.0, 0.0, 0.0, 1.0}; //由三个坐标值确定的X方向和Y方向,笛卡尔坐标系,确定两个就能确定第三个坐标方向 double dest_point2 [ 3 ] = {0.0, -50.0, 0.0,}; //导入的原点 double scale2 = 1.0; //缩放比例 tag_t group2 = NULL_TAG; UF_CALL(UF_PART_import("D:\\Program Files\\Siemens\\NX 10.0\\SECONDARY_DEVELOPMENT\\DateBase\\ToolBase\\刀杆库\\266RKF-D10.prt", &modes2, dest_csys2, dest_point2, scale2, &group2)); printf("第四步,导入刀杆!"); UF_CALL(UF_PART_save_as("D:\\Program Files\\Siemens\\NX 10.0\\SECONDARY_DEVELOPMENT\\DateBase\\Temp\\ToolNum.stp")); UF_CALL(UF_PART_close(PartTAG, 0, 1)); printf("保存文件!"); /* Terminate the API environment */ UF_CALL(UF_terminate()); } /***************************************************************************** ** Utilities *****************************************************************************/ ```

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的动态链接库就出错了

C++中回调函数的实现以及代码错误

我是一个刚学C++的小白,基础比较差,但是现在有一个东西必须学习,就是回调函数。其实不太懂回调函数原理,我现在要写一个类之后封装成dll文件。最后写一个MFC程序调用这个dll文件。 内容就是需要写一个相机采集的简单步骤,需要MFC程序用回调函数的方式几首图像。接受图像就写成简单的文字就可以了。以下是我的代码: 类.h文件 #ifdef MYCAMDLL_EXPORTS #define MYCAMDLL_API __declspec(dllexport) #else #define MYCAMDLL_API __declspec(dllimport) #endif // //#ifndef MYCAMDLL_API //#define MYCAMDLL_API __declspec(dllimport) //#endif typedef void(CMyCamDll::*CallBackPtr)(void *, char *); // 此类是从 MyCamDll.dll 导出的 /* EXTERN_C */ class MYCAMDLL_API CMyCamDll { public: CMyCamDll(void); // TODO: 在此添加您的方法。 public: void OpenDiv(); void Start(); void Display(); void Stop(); void CloseDiv(); void call(); void setcallback(); private: CallBackPtr *callback; CMyCamDll *per; }; 类.cpp文件: #include "stdafx.h" #include "MyCamDll.h" #ifdef _DEBUG #define new DEBUG_NEW #endif CWinApp theApp; using namespace std; CMyCamDll::CMyCamDll() { } void CMyCamDll::call() { MessageBox(NULL, "图像显示", "显示图像中", NULL); } void CMyCamDll::setcallback() { callback = (CallBackPtr)(&CMyCamDll::call); per = this; } void CMyCamDll::OpenDiv() { MessageBox(NULL, "开启设备", "设备已启用", NULL); } void CMyCamDll::Start() { MessageBox(NULL, "采集图像", "已开始采集", NULL); } void CMyCamDll::Display() { MessageBox(NULL, "显示图像", "图像已显示", NULL); } void CMyCamDll::Stop() { MessageBox(NULL, "停止采集", "已停止采集", NULL); } void CMyCamDll::CloseDiv() { MessageBox(NULL, "关闭设备", "设备已关闭", NULL); (CallBackPtr)这里出现报错:IntelliSense: 不允许强制转换到类型 "CallBackPtr"

GetProcAddress 返回 NULL, 错误代码 127

# 本问题作废,错误: if (hinstLib = NULL) ------------ 源程序改自 《程序员的自我修养:链接、装载与库》 第1版 第9 章 编译环境 VS2017/Win SDK 10.0. # 问题概要 DLL动态库,LoadLibrary() 成功, GetProcAddress()失败, GetLastError()返回127. 但是 dumpbin 能够找到所需要的符号. 请问如何改可以正确执行 # 详细描述 ## 动态库 Math.dll 代码 Math.c ``` __declspec(dllexport) double Add(double a, double b) { return a + b; } ``` 生成 DLL ``` cl /LDd Math.c ``` 查看导出结果 ``` dumpbin /EXPORTS Math.dll ... ordinal hint RVA name 1 0 00001000 Add ... ``` ## 主程序调用 程序代码 main.c ``` #include <windows.h> #include <stdio.h> typedef double (*Func)(double, double); int main(int argc, char **argv) { Func function; double result; // Load DLL. HINSTANCE hinstLib = LoadLibrary("Math.dll"); if (hinstLib = NULL) { printf("ERROR: unable to load DLL\n"); return 1; } // Get function address. function = (Func)GetProcAddress(hinstLib, "Add"); if (function == NULL) { printf("ERROR: unable to find DLL function, " "GetLastError() returns %d.\n", GetLastError()); FreeLibrary(hinstLib); return 1; } // Call function. result = function(1.0, 2.0); // Unload DLL file. FreeLibrary(hinstLib); // Display result. printf("Result = %f\n", result); return 0; } ``` 编译链接 ``` cl main.c ``` 运行 ``` ERROR: unable to find DLL function, GetLastError() returns 127. ```

显式加载的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)函数内部,是不同的。

MFC 错误 LNK2001 无法解析的外部符号

// SerialTest3Dlg.h : 头文件 // #pragma once #include "afxwin.h" #include "mscomm2.h" #include "stdint.h" #include "stdafx.h" // CSerialTest3Dlg 对话框 class CSerialTest3Dlg : public CDialogEx { // 构造 public: CSerialTest3Dlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_SERIALTEST3_DIALOG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() private: CString m_EditReceive;//接收框 CString m_Editsend;//发送框 CComboBox m_comb1;//COM口下拉框 public: CComboBox m_comb2;//波特率下拉框 CMscomm2 m_mscom;//串口控件 afx_msg void OnBnClickedButtonOpen();//打开按钮 afx_msg void OnBnClickedButtonCleanup();//清楚按钮 afx_msg void OnBnClickedButtonClose();//关闭按钮 DECLARE_EVENTSINK_MAP() void OnCommMscomm1();//串口按钮(隐形) CEdit m_Edit; CString m_interpretingdata;//解析数据 afx_msg void OnBnClickedButton5();//发送按钮 }; typedef struct FPGA_INFO_REPORT { uint8_t bWorkMode; //当前工作模式0x00表示初始模式0x01表示扫频模式0x02表示闭环驱动和检测模式0x03表示开环驱动和检测模式0x04表示连续Q值计算模式 uint8_t bCheckMode; //当前检测类型0x01表示开环检测0x02表示闭环检测调试0x03表示闭环检测0x04表示正交校正模式 uint8_t bADMagTimes; //检测信号放大倍数 uint32_t dwSweepTime; //扫频完成时间,毫秒 float fSweepFreq; //扫频得到的谐振频率 float fSweepFreqAmpl; //扫频谐振频率对应的驱动反馈信号幅值 float fDriSignalFreq; //驱动信号频率 float fDriSignalAmpl; //驱动信号幅度 float fDriveFbAmpl; //驱动反馈信号幅度 float fDriveFbPhase; //驱动反馈信号相位 float fBalSignalAmpl; //力平衡信号幅度 float fBalSignalPhase; //力平衡信号相位 float fCheckSignalAmpl; //检测信号幅度 float fCheckSignalPhase; //检测信号相位 float fCheckSignalPalst; //角速度 }FPGA_INFO_REPORT1; // SerialTest3Dlg.cpp : 实现文件 // #include "stdafx.h" #include "SerialTest3.h" #include "SerialTest3Dlg.h" #include "afxdialogex.h" #include <stdlib.h> #include "parser.h" #include <string.h> #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CSerialTest3Dlg 对话框 CSerialTest3Dlg::CSerialTest3Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_SERIALTEST3_DIALOG, pParent) , m_EditReceive(_T("")) , m_Editsend(_T("")) , m_interpretingdata(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CSerialTest3Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_Rev, m_EditReceive); DDX_Text(pDX, IDC_EDIT_Tev, m_Editsend); DDX_Control(pDX, IDC_COMBO2, m_comb1); DDX_Control(pDX, IDC_COMBO3, m_comb2); DDX_Control(pDX, IDC_MSCOMM2, m_mscom); DDX_Control(pDX, IDC_EDIT_Rev, m_Edit); DDX_Text(pDX, IDC_EDIT16, m_interpretingdata); } BEGIN_MESSAGE_MAP(CSerialTest3Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_OPEN, &CSerialTest3Dlg::OnBnClickedButtonOpen) ON_BN_CLICKED(IDC_BUTTON_CLEANUP, &CSerialTest3Dlg::OnBnClickedButtonCleanup) ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CSerialTest3Dlg::OnBnClickedButtonClose) //ON_BN_CLICKED(IDC_BUTTON1, &CSerialTest3Dlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON5, &CSerialTest3Dlg::OnBnClickedButton5) END_MESSAGE_MAP() // CSerialTest3Dlg 消息处理程序 BOOL CSerialTest3Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 串口选择组合框 CString str; int i; for (i = 0; i < 5; i++) { str.Format(_T("com %d"), i + 1); m_comb1.InsertString(i, str); } m_comb1.SetCurSel(0);//预置COM口 // 波特率选择组合框 CString str1[] = { _T("4800"),_T("9600"),_T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200") }; for (int i = 0; i < 8; i++) { int judge_tf = m_comb2.AddString(str1[i]); if ((judge_tf == CB_ERR) || (judge_tf == CB_ERRSPACE)) MessageBox(_T("build baud error!")); } m_comb2.SetCurSel(7);//预置波特率为"115200" return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CSerialTest3Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CSerialTest3Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CSerialTest3Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CSerialTest3Dlg::OnBnClickedButtonOpen()//打开串口 按钮程序 { // TODO: 在此添加控件通知处理程序代码 CString str, str1, n; //定义字符串 GetDlgItemText(IDC_BUTTON_OPEN, str); CWnd *h1; h1 = GetDlgItem(IDC_BUTTON_OPEN); //指向控件的caption if (!m_mscom.get_PortOpen()) { m_comb2.GetLBText(m_comb2.GetCurSel(), str1);//取得所选的字符串,并存放在str1里面 str1 = str1 + ',' + 'n' + ',' + '8' + ',' + '1'; //这句话很关键 m_mscom.put_CommPort((m_comb1.GetCurSel() + 1)); //选择串口 m_mscom.put_InputMode(1); //设置输入方式为二进制方式 m_mscom.put_Settings(str1); //波特率为(波特率组合框)无校验,8数据位,1个停止位 m_mscom.put_InputLen(1024); //设置当前接收区数据长度为1024 m_mscom.put_RThreshold(1); //缓冲区一个字符引发事件 m_mscom.put_RTSEnable(1); //设置RT允许 m_mscom.put_PortOpen(true); //打开串口 if (m_mscom.get_PortOpen()) { str = _T("关闭串口"); UpdateData(true); h1->SetWindowText(str); //改变按钮名称为“关闭串口” } } else { m_mscom.put_PortOpen(false); if (str != _T("打开串口")) { str = _T("打开串口"); UpdateData(true); h1->SetWindowText(str); //改变按钮名称为打开串口 } } } void CSerialTest3Dlg::OnBnClickedButtonCleanup()//清除数据按钮 { // TODO: 在此添加控件通知处理程序代码 m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //更新数据 } void CSerialTest3Dlg::OnBnClickedButtonClose()//退出按钮 { // TODO: 在此添加控件通知处理程序代码 m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //更新数据 } BEGIN_EVENTSINK_MAP(CSerialTest3Dlg, CDialogEx) ON_EVENT(CSerialTest3Dlg, IDC_MSCOMM2, 1, CSerialTest3Dlg::OnCommMscomm1, VTS_NONE) END_EVENTSINK_MAP() //CString temp; void CSerialTest3Dlg::OnCommMscomm1()//串口控件(按钮) { // TODO: 在此处添加消息处理程序代码 if (m_mscom.get_CommEvent() == 2) { char str[2048] = { 0 }; long k; CString temp; VARIANT InputData = m_mscom.get_Input(); //读缓冲区 COleSafeArray fs; fs = InputData; //VARIANT型变量转换为COleSafeArray型变量 for (k = 0; k < fs.GetOneDimSize(); k++) { fs.GetElement(&k, str + k); //转换为BYTE型数组 temp.Format(L"%02X",(char*)(str + k));//输出显示16进制 m_EditReceive += temp; // 接收到数据显示在编辑框里面 } SetTimer(1,10,NULL); //延时10ms UpdateData(false); m_Edit.SetSel(-1, 1); this->SetDlgItemTextW(IDC_EDIT_Rev, m_EditReceive);//将接收框内容显示到最后位置 m_Edit.LineScroll(m_Edit.GetLineCount() - 1, 0);//将垂直滚动条滚动到最后一行 FPGA_INFO_REPORT1 info; memcpy(&info, str, sizeof(str)); CString str2; str2.Format(L"当前工作模式:%c\n", info.bWorkMode, "当前检测类型:%c\n", info.bCheckMode, "检测信号放大倍数:%c\n", info.bADMagTimes, "扫频完成时间:%c\n", info.dwSweepTime, "扫频得到的谐振频率:%f\n", info.fSweepFreq, "扫频谐振频率对应的驱动反馈信号幅值:%f\n", info.fSweepFreqAmpl, "驱动信号频率:%f\n", info.fDriSignalFreq, "驱动信号幅度:%f\n", info.fDriSignalAmpl, "驱动反馈信号幅度:%f\n", info.fDriveFbAmpl, "力平衡信号幅度:%f\n", info.fBalSignalAmpl, "力平衡信号相位:%f\n", info.fBalSignalPhase, "检测信号幅度:%f\n", info.fCheckSignalAmpl, "检测信号相位:%f\n", info.fCheckSignalPhase, "角速度:%f\n", info.fCheckSignalPalst); m_interpretingdata =str2; } } void CSerialTest3Dlg::OnBnClickedButton5() { // TODO: 在此添加控件通知处理程序代码 UpdateData(true); //更新控件数据 m_mscom.put_Output(COleVariant(m_Editsend));//把发送编辑框的数据发送出去 } 以上代码报错 :错误 LNK2001 无法解析的外部符号 "public: virtual struct CRuntimeClass * __thiscall CMscomm2::GetRuntimeClass(void)const " (?GetRuntimeClass@CMscomm2@@UBEPAUCRuntimeClass@@XZ) SerialTest3 C:\Users\LFY\Desktop\SerialTest3\SerialTest3\SerialTest3Dlg.obj 1 是什么原因

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

广工操作系统课程设计(文档+代码+可执行文件)

实现作业调度(先来先服务)、进程调度功能(时间片轮转) 实现内存管理功能(连续分配)。 实现文件系统功能(选作) 这些功能要有机地连接起来

Only老K说-爬取妹子图片(简单入门)

安装第三方请求库 requests 被网站禁止了访问 原因是我们是Python过来的 重新给一段 可能还是存在用不了,使用网页的 编写代码 上面注意看匹配内容 User-Agent:请求对象 AppleWebKit:请求内核 Chrome浏览器 //请求网页 import requests import re //正则表达式 就是去不规则的网页里面提取有规律的信息 headers = { 'User-Agent':'存放浏览器里面的' } response = requests.get

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

apache-jmeter-5.1.1(Requires Java 8+).zip

。Apache JMeter 5.1.1 (Requires Java 8+),需要jdk8以上的版本。

数通HCNP中文理论全套教材.rar

内涵HCNP-IENP中文理论书-内文,

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

DDR5_Draft_Spec_Rev05c.pdf

DDR5 spec

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

前言: 说在前面, 面试题是根据一些朋友去面试提供的,再就是从网上整理了一些。 先更新50道,下一波吧后面的也更出来。 求赞求关注!! 废话也不多说,现在就来看看有哪些面试题 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

实现简单的文件系统

实验内容: 通过对具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 要求: 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简

NS2与网络仿真模拟实验教程

文档时ppt格式,从各个层面,结合具体事例解释说明了个NS2模块中的各部分功能与编译技巧、说明等。

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

Windows版YOLOv4目标检测实战:训练自己的数据集

课程演示环境:Windows10; cuda 10.2; cudnn7.6.5; Python3.7; VisualStudio2019; OpenCV3.4 需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:训练自己的数据集》 课程链接:https://edu.csdn.net/course/detail/28745 YOLOv4来了!速度和精度双提升! 与 YOLOv3 相比,新版本的 AP (精度)和 FPS (每秒帧率)分别提高了 10% 和 12%。 YOLO系列是基于深度学习的端到端实时目标检测方法。本课程将手把手地教大家使用labelImg标注和使用YOLOv4训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。 本课程的YOLOv4使用AlexyAB/darknet,在Windows系统上做项目演示。包括:安装软件环境、安装YOLOv4、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算)和先验框聚类分析。还将介绍改善YOLOv4目标检测性能的技巧。 除本课程《Windows版YOLOv4目标检测实战:训练自己的数据集》外,本人将推出有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》 《Windows版YOLOv4目标检测实战:中国交通标志识别》 《Windows版YOLOv4目标检测:原理与源码解析》

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

一学即懂的计算机视觉(第一季)

图像处理和计算机视觉的课程大家已经看过很多,但总有“听不透”,“用不了”的感觉。课程致力于创建人人都能听的懂的计算机视觉,通过生动、细腻的讲解配合实战演练,让学生真正学懂、用会。 【超实用课程内容】 课程内容分为三篇,包括视觉系统构成,图像处理基础,特征提取与描述,运动跟踪,位姿估计,三维重构等内容。课程理论与实战结合,注重教学内容的可视化和工程实践,为人工智能视觉研发及算法工程师等相关高薪职位就业打下坚实基础。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/26281 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,但是大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 下载方式:电脑登录https://edu.csdn.net/course/detail/26281,点击右下方课程资料、代码、课件等打包下载

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

医院床位利用分析 数学建模

床位利用指数法 目标分析法 医院床位利用率

相关热词 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行 c# 循环给数组插入数据 c# 多线程死锁的例子 c# 钉钉读取员工排班 c# label 不显示 c#裁剪影像 c#工作进程更新ui
立即提问