BCB中封装VC控件CodeSense

VC实现自定义控件步骤 VC实现自定义控件   一. 控件的最小实现 1.1 添加MFC类CMyCtrl 添加MFC类CMyCtrl, 继承CWnd.(用向导添加, 自己手动写代码都可以).   1.2 添加CMyCtrl::RegisterWindowClass函数 添加和实现CMyCtrl::RegisterWindowClass函数(函数名随便), 该函数在构造函数中调用即可.   1.3 阅读详情

Q: http://community.youkuaiyun.com/Expert/topic/3179/3179109.xml?temp=.7848627

作者想要一个ocx的解决方案,我没有给出来。bcb在这个方面一直是诟病多多,呵呵。不过他的那个控件是open source的。原作者使用vc+mfc来开发的,不过接口就是api+消息了。这样的使用vcl来封装这个控件变得不是十分困难了。

CodeSense 是一个源码着色的编辑控件。

这是原文件的下载地址。

http://www.ticz.com/homes/users/nlewis/HTML/Software_Development/CodeSense/Download/CodeSense/cmcs222.zip

使用之前你需要用implib -a cmcs21.lib cmcs21.dll 来导出import library。

以下我做的封装:

#include <vcl.h>

#define _T //added by cker. A dirty hack.

#include "CodeSense.h"

#include <assert.h>

#define ASSERT assert

 

class TCodeSenseCtrl : public TWinControl

{

  protected:

    virtual void __fastcall CreateParams(Controls::TCreateParams &Params)

    {

        CMRegisterControl();

        TWinControl::CreateParams(Params);

        CreateSubClass(Params, CODESENSEWNDCLASS);

    }

  public:

   __fastcall virtual TCodeSenseCtrl(TComponent* AOwner) : TWinControl(AOwner)

   {

   }

   __fastcall virtual ~TCodeSenseCtrl()

   {

    CMUnregisterControl();

   }

 

  public:

    CME_CODE SetLanguage( LPCTSTR pszName )

    {

      return CM_SetLanguage( Handle, pszName );

    }

    CME_CODE GetLanguage( LPTSTR pszName )

    {

      return CM_GetLanguage( Handle, pszName );

    }

    CME_CODE EnableColorSyntax( BOOL bEnable = TRUE )

    {

      return CM_EnableColorSyntax( Handle, bEnable );

    }

    BOOL IsColorSyntaxEnabled()

    {

      return CM_IsColorSyntaxEnabled( Handle );

    }

    CME_CODE OpenFile( LPCTSTR pszFileName )

    {

      return CM_OpenFile( Handle, pszFileName );

    }

    CME_CODE InsertFile( LPCTSTR pszFileName, const CM_POSITION *pPos = NULL )

    {

      return CM_InsertFile( Handle, pszFileName, pPos );

    }

    CME_CODE InsertText( LPCTSTR pszText, const CM_POSITION *pPos = NULL )

    {

      return CM_InsertText( Handle, pszText, pPos );

    }

    CME_CODE SetText( LPCTSTR pszText )

    {

      return CM_SetText( Handle, pszText );

    }

    CME_CODE SetColors( const CM_COLORS *pColors )

    {

      return CM_SetColors( Handle, pColors );

    }

    CME_CODE GetColors( CM_COLORS *pColors )

    {

      return CM_GetColors( Handle, pColors );

    }

    CME_CODE EnableWhitespaceDisplay( BOOL bEnable = TRUE )

    {

      return CM_EnableWhitespaceDisplay( Handle, bEnable );

    }

    BOOL IsWhitespaceDisplayEnabled()

    {

      return CM_IsWhitespaceDisplayEnabled( Handle );

    }

    CME_CODE EnableTabExpand( BOOL bEnable = TRUE )

    {

      return CM_EnableTabExpand( Handle, bEnable );

    }

    BOOL IsTabExpandEnabled()

    {

      return CM_IsTabExpandEnabled( Handle );

    }

    CME_CODE EnableSmoothScrolling( BOOL bEnable = TRUE )

    {

      return CM_EnableSmoothScrolling( Handle, bEnable );

    }

    BOOL IsSmoothScrollingEnabled()

    {

      return CM_IsSmoothScrollingEnabled( Handle );

    }

    CME_CODE SetTabSize( int nTabSize )

    {

      return CM_SetTabSize( Handle, nTabSize );

    }

    int GetTabSize()

    {

      return CM_GetTabSize( Handle );

    }

    CME_CODE SetReadOnly( BOOL bReadOnly = TRUE )

    {

      return CM_SetReadOnly( Handle, bReadOnly );

    }

    BOOL IsReadOnly()

    {

      return CM_IsReadOnly( Handle );

    }

    CME_CODE EnableLineToolTips( BOOL bEnable = TRUE )

    {

      return CM_EnableLineToolTips( Handle, bEnable );

    }

    BOOL IsLineToolTipsEnabled()

    {

      return CM_IsLineToolTipsEnabled( Handle );

    }

    CME_CODE EnableLeftMargin( BOOL bEnable = TRUE )

    {

      return CM_EnableLeftMargin( Handle, bEnable );

    }

    BOOL IsLeftMarginEnabled()

    {

      return CM_IsLeftMarginEnabled( Handle );

    }

    CME_CODE SaveFile( LPCTSTR pszFileName, BOOL bClearUndo = TRUE )

    {

      return CM_SaveFile( Handle, pszFileName, bClearUndo );

    }

    CME_CODE ReplaceText( LPCTSTR pszText, const CM_RANGE *pRange = NULL )

    {

      return CM_ReplaceText( Handle, pszText, pRange );

    }

    int GetTextLength( const CM_RANGE *pRange = NULL, BOOL bLogical = FALSE )

    {

      return CM_GetTextLength( Handle, pRange, bLogical );

    }

    CME_CODE GetText( LPTSTR pszBuff, const CM_RANGE *pRange = NULL )

    {

      return CM_GetText( Handle, pszBuff, pRange );

    }

//    CME_CODE GetText( CString &strText, const CM_RANGE *pRange = NULL )

//      { ASSERT( ::IsWindow( Handle ) );

//        CME_CODE nCode = CM_GetText( Handle, strText.GetBufferSetLength( GetTextLength( pRange ) + 1 ), pRange );

//        strText.ReleaseBuffer();

//        return nCode; }

    CME_CODE GetLine( int nLine, LPTSTR pszBuff )

    {

      return CM_GetLine( Handle, nLine, pszBuff );

    }

//    CME_CODE GetLine( int nLine, CString &strLine )

//      { ASSERT( ::IsWindow( Handle ) );

//        CME_CODE nCode = CM_GetLine( Handle, nLine, strLine.GetBufferSetLength( GetLineLength( nLine ) + 1 ) );

//        strLine.ReleaseBuffer();

//        return nCode; }

    int GetLineCount()

    {

      return CM_GetLineCount( Handle );

    }

    int GetLineLength( int nLine, BOOL bLogical = FALSE )

    {

      return CM_GetLineLength( Handle, nLine, bLogical );

    }

    CME_CODE GetWord( LPTSTR pszBuff, CM_POSITION *pPos )

    {

      return CM_GetWord( Handle, pszBuff, pPos );

    }

//    CME_CODE GetWord( CString &strWord, CM_POSITION *pPos )

//      { ASSERT( ::IsWindow( Handle ) );

//        CME_CODE nCode = CM_GetWord( Handle, strWord.GetBufferSetLength( GetWordLength( pPos ) + 1 ), pPos );

//        strWord.ReleaseBuffer();

//        return nCode; }

    int GetWordLength( CM_POSITION *pPos, BOOL bLogical = FALSE )

    {

      return CM_GetWordLength( Handle, pPos, bLogical );

    }

    CME_CODE AddText( LPCTSTR pszText )

    {

      return CM_AddText( Handle, pszText );

    }

    CME_CODE DeleteLine( int nLine )

    {

      return CM_DeleteLine( Handle, nLine );

    }

    CME_CODE InsertLine( int nLine, LPCTSTR pszText )

    {

      return CM_InsertLine( Handle, nLine, pszText );

    }

    CME_CODE GetSel( CM_RANGE *pRange, BOOL bNormalized = TRUE )

    {

      return CM_GetSel( Handle, pRange, bNormalized );

    }

    CME_CODE SetSel( const CM_RANGE *pRange, BOOL bMakeVisible = TRUE )

    {

      return CM_SetSel( Handle, pRange, bMakeVisible );

    }

    CME_CODE DeleteSel()

    {

      return CM_DeleteSel( Handle );

    }

    CME_CODE ReplaceSel( LPCTSTR pszText )

    {

      return CM_ReplaceSel( Handle, pszText );

    }

    CME_CODE ExecuteCmd( WORD wCmd, DWORD dwCmdData = 0 )

    {

      return CM_ExecuteCmd( Handle, wCmd, dwCmdData );

    }

    CME_CODE SetSplitterPos( BOOL bHorz, int nPos )

    {

      return CM_SetSplitterPos( Handle, bHorz, nPos );

    }

    int GetSplitterPos( BOOL bHorz )

    {

      return CM_GetSplitterPos( Handle, bHorz );

    }

    CME_CODE SetAutoIndentMode( int nMode )

    {

      return CM_SetAutoIndentMode( Handle, nMode );

    }

    int GetAutoIndentMode()

    {

      return CM_GetAutoIndentMode( Handle );

    }

    BOOL CanCopy()

    {

      return CM_CanCopy( Handle );

    }

    BOOL CanCut()

    {

      return CM_CanCut( Handle );

    }

    BOOL CanPaste()

    {

      return CM_CanPaste( Handle );

    }

    CME_CODE Copy()

    {

      return CM_Copy( Handle );

    }

    CME_CODE Cut()

    {

      return CM_Cut( Handle );

    }

    CME_CODE Paste()

    {

      return CM_Paste( Handle );

    }

    BOOL CanUndo()

    {

      return CM_CanUndo( Handle );

    }

    BOOL CanRedo()

    {

      return CM_CanRedo( Handle );

    }

    CME_CODE Redo()

    {

      return CM_Redo( Handle );

    }

    CME_CODE Undo()

    {

      return CM_Undo( Handle );

    }

    CME_CODE ClearUndoBuffer()

    {

      return CM_ClearUndoBuffer( Handle );

    }

    CME_CODE SetUndoLimit( int nLimit )

    {

      return CM_SetUndoLimit( Handle, nLimit );

    }

    int GetUndoLimit()

    {

      return CM_GetUndoLimit( Handle );

    }

    BOOL IsModified()

    {

      return CM_IsModified( Handle );

    }

    CME_CODE SetModified( BOOL bModified = TRUE )

    {

      return CM_SetModified( Handle, bModified );

    }

    CME_CODE EnableOvertype( BOOL bEnable = TRUE )

    {

      return CM_EnableOvertype( Handle, bEnable );

    }

    BOOL IsOvertypeEnabled()

    {

      return CM_IsOvertypeEnabled( Handle );

    }

    CME_CODE EnableCaseSensitive( BOOL bEnable = TRUE )

    {

      return CM_EnableCaseSensitive( Handle, bEnable );

    }

    BOOL IsCaseSensitiveEnabled()

    {

      return CM_IsCaseSensitiveEnabled( Handle );

    }

    CME_CODE EnablePreserveCase( BOOL bEnable = TRUE )

    {

      return CM_EnablePreserveCase( Handle, bEnable );

    }

    BOOL IsPreserveCaseEnabled()

    {

      return CM_IsPreserveCaseEnabled( Handle );

    }

    CME_CODE EnableWholeWord( BOOL bEnable = TRUE )

    {

      return CM_EnableWholeWord( Handle, bEnable );

    }

    BOOL IsWholeWordEnabled()

    {

      return CM_IsWholeWordEnabled( Handle );

    }

    CME_CODE EnableRegExp( BOOL bEnable = TRUE )

    {

      return CM_EnableRegExp( Handle, bEnable );

    }

    BOOL IsRegExpEnabled()

    {

      return CM_IsRegExpEnabled( Handle );

    }

    CME_CODE SetTopIndex( int nView, int nLine )

    {

      return CM_SetTopIndex( Handle, nView, nLine );

    }

    int GetTopIndex( int nView )

    {

      return CM_GetTopIndex( Handle, nView );

    }

    int GetVisibleLineCount( int nView, BOOL bFullyVisible = TRUE )

    {

      return CM_GetVisibleLineCount( Handle, nView, bFullyVisible );

    }

    CME_CODE EnableCRLF( BOOL bEnable = TRUE )

    {

      return CM_EnableCRLF( Handle, bEnable );

    }

    BOOL IsCRLFEnabled()

    {

      return CM_IsCRLFEnabled( Handle );

    }

    CME_CODE SetFontOwnership( BOOL bEnable )

    {

      return CM_SetFontOwnership( Handle, bEnable );

    }

    BOOL GetFontOwnership()

    {

      return CM_GetFontOwnership( Handle );

    }

    int GetCurrentView()

    {

      return CM_GetCurrentView( Handle );

    }

    CME_CODE SetCurrentView(int nView)

    {

      return CM_SetCurrentView( Handle, nView );

    }

    int GetViewCount()

    {

      return CM_GetViewCount( Handle );

    }

    CME_CODE ShowScrollBar( BOOL bHorz, BOOL bShow = TRUE )

    {

      return CM_ShowScrollBar( Handle, bHorz, bShow );

    }

    BOOL HasScrollBar( BOOL bHorz )

    {

      return CM_HasScrollBar( Handle, bHorz );

    }

    CME_CODE GetSelFromPoint( int xClient, int yClient, CM_POSITION *pPos )

    {

      return CM_GetSelFromPoint( Handle, xClient, yClient, pPos );

    }

    CME_CODE SelectLine( int nLine, BOOL bMakeVisible = TRUE )

    {

      return CM_SelectLine( Handle, nLine, bMakeVisible );

    }

    int HitTest( int xClient, int yClient )

    {

      return CM_HitTest( Handle, xClient, yClient );

    }

    CME_CODE EnableDragDrop( BOOL bEnable = TRUE )

    {

      return CM_EnableDragDrop( Handle, bEnable );

    }

    BOOL IsDragDropEnabled()

    {

      return CM_IsDragDropEnabled( Handle );

    }

    CME_CODE EnableSplitter( BOOL bHorz, BOOL bEnable = TRUE )

    {

      return CM_EnableSplitter( Handle, bHorz, bEnable );

    }

    BOOL IsSplitterEnabled( BOOL bHorz )

    {

      return CM_IsSplitterEnabled( Handle, bHorz );

    }

    CME_CODE EnableColumnSel( BOOL bEnable = TRUE )

    {

      return CM_EnableColumnSel( Handle, bEnable );

    }

    BOOL IsColumnSelEnabled()

    {

      return CM_IsColumnSelEnabled( Handle );

    }

    CME_CODE EnableGlobalProps( BOOL bEnable = TRUE )

    {

      return CM_EnableGlobalProps( Handle, bEnable );

    }

    BOOL IsGlobalPropsEnabled()

    {

      return CM_IsGlobalPropsEnabled( Handle );

    }

    BOOL IsRecordingMacro()

    {

      return CM_IsRecordingMacro( Handle );

    }

    BOOL IsPlayingMacro()

    {

      return CM_IsPlayingMacro( Handle );

    }

    CME_CODE SetDlgParent( HWND *hWnd )

    {

      return CM_SetDlgParent( Handle, hWnd );

    }

    CME_CODE EnableSelBounds( BOOL bEnable = TRUE )

    {

      return CM_EnableSelBounds( Handle, bEnable );

    }

    BOOL IsSelBoundsEnabled()

    {

      return CM_IsSelBoundsEnabled( Handle );

    }

    CME_CODE SetFontStyles( CM_FONTSTYLES *pFontStyles )

    {

      return CM_SetFontStyles( Handle, pFontStyles );

    }

    CME_CODE GetFontStyles( CM_FONTSTYLES *pFontStyles )

    {

      return CM_GetFontStyles( Handle, pFontStyles );

    }

    CME_CODE SetItemData( int nLine, LPARAM lParam )

    {

      return CM_SetItemData( Handle, nLine, lParam );

    }

    LPARAM GetItemData( int nLine )

    {

      return CM_GetItemData( Handle, nLine );

    }

    CME_CODE SetLineStyle( int nLine, DWORD dwStyle )

    {

      return CM_SetLineStyle( Handle, nLine, dwStyle );

    }

    DWORD GetLineStyle( int nLine )

    {

      return CM_GetLineStyle( Handle, nLine );

    }

    CME_CODE SetBookmark( int nLine, BOOL bEnable = TRUE )

    {

      return CM_SetBookmark( Handle, nLine, bEnable );

    }

    BOOL GetBookmark( int nLine )

    {

      return CM_GetBookmark( Handle, nLine );

    }

    CME_CODE SetAllBookmarks( int nCount, LPDWORD pdwLines )

    {

      return CM_SetAllBookmarks( Handle, nCount, pdwLines );

    }

    int GetAllBookmarks( LPDWORD pdwLines )

    {

      return CM_GetAllBookmarks( Handle, pdwLines );

    }

    CME_CODE SetLineNumbering( CM_LINENUMBERING *pNumbering )

    {

      return CM_SetLineNumbering( Handle, pNumbering );

    }

    CME_CODE GetLineNumbering( CM_LINENUMBERING *pNumbering )

    {

      return CM_GetLineNumbering( Handle, pNumbering );

    }

    CME_CODE PosFromChar( CM_POSITION *pPos, LPRECT pRect )

    {

      return CM_PosFromChar( Handle, pPos, pRect );

    }

    CME_CODE EnableHideSel( BOOL bEnable = TRUE )

    {

      return CM_EnableHideSel( Handle, bEnable );

    }

    BOOL IsHideSelEnabled()

    {

      return CM_IsHideSelEnabled( Handle );

    }

    CME_CODE SetHighlightedLine( int nLine )

    {

      return CM_SetHighlightedLine( Handle, nLine );

    }

    int GetHighlightedLine()

    {

      return CM_GetHighlightedLine( Handle );

    }

    CME_CODE EnableNormalizeCase( BOOL bEnable = TRUE )

    {

      return CM_EnableNormalizeCase( Handle, bEnable );

    }

    BOOL IsNormalizeCaseEnabled()

    {

      return CM_IsNormalizeCaseEnabled( Handle );

    }

    CME_CODE SetDivider( int nLine, BOOL bEnable = TRUE )

    {

      return CM_SetDivider( Handle, nLine, bEnable );

    }

    BOOL GetDivider( int nLine )

    {

      return CM_GetDivider( Handle, nLine );

    }

    CME_CODE EnableOvertypeCaret( BOOL bEnable = TRUE )

    {

      return CM_EnableOvertypeCaret( Handle, bEnable );

    }

    BOOL IsOvertypeCaretEnabled()

    {

      return CM_IsOvertypeCaretEnabled( Handle );

    }

    CME_CODE SetFindText( LPCTSTR pszText )

    {

      return CM_SetFindText( Handle, pszText );

    }

    CME_CODE GetFindText( LPTSTR pszText )

    {

      return CM_GetFindText( Handle, pszText );

    }

//    CME_CODE GetFindText( CString &strText )

//    {

//      CME_CODE nCode = CM_GetFindText( Handle, strText.GetBufferSetLength( CM_MAX_FINDREPL_TEXT ) );

//        strText.ReleaseBuffer();

//      return nCode;

//    }

    CME_CODE SetReplaceText( LPCTSTR pszText )

    {

      return CM_SetReplaceText( Handle, pszText );

    }

    CME_CODE GetReplaceText( LPTSTR pszText )

    {

      return CM_GetReplaceText( Handle, pszText );

    }

//    CME_CODE GetReplaceText( CString &strText )

//    {

//      CME_CODE nCode = CM_GetReplaceText( Handle, strText.GetBufferSetLength( CM_MAX_FINDREPL_TEXT ) );

//        strText.ReleaseBuffer();

//      return nCode;

//    }

    CME_CODE SetImageList( HIMAGELIST hImageList )

    {

      return CM_SetImageList( Handle, hImageList );

    }

    HIMAGELIST GetImageList()

    {

      return CM_GetImageList( Handle );

    }

    CME_CODE SetMarginImages( int nLine, BYTE byImages )

    {

      return CM_SetMarginImages( Handle, nLine, byImages );

    }

    BYTE GetMarginImages( int nLine )

    {

      return CM_GetMarginImages( Handle, nLine );

    }

    CME_CODE AboutBox()

    {

      return CM_AboutBox( Handle );

    }

    CME_CODE Print( HDC hDC, DWORD dwFlags )

    {

      return CM_Print( Handle, hDC, dwFlags );

    }

    CME_CODE SetCaretPos( int nLine, int nCol )

    {

      return CM_SetCaretPos( Handle, nLine, nCol );

    }

    int ViewColToBufferCol( int nLine, int nViewCol )

    {

      return CM_ViewColToBufferCol( Handle, nLine, nViewCol );

    }

    int BufferColToViewCol( int nLine, int nBufferCol )

    {

      return CM_BufferColToViewCol( Handle, nLine, nBufferCol );

    }

    CME_CODE SetBorderStyle( DWORD dwStyle )

    {

      return CM_SetBorderStyle( Handle, dwStyle );

    }

    DWORD GetBorderStyle()

    {

      return CM_GetBorderStyle( Handle );

    }

    DWORD GetCurrentToken()

    {

      return CM_GetCurrentToken( Handle );

    }

    void UpdateControlPositions()

    {

      CM_UpdateControlPositions( Handle );

    }

 

 

};

注释掉的是关于Cstring的部分,没什么大意义。懒得再写AnsiString的封装了。

下面是调用示例:

//----------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

 

#include "Unit1.h"

#include "CodeSense.h"

#include "TCodeSenseCtrl.h"

//----------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//----------------------------------------------------------------------

TCodeSenseCtrl* s;

__fastcall TForm1::TForm1(TComponent* Owner)

  : TForm(Owner)

{

}

//----------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)

{

  delete s;

}

//----------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

  s = new TCodeSenseCtrl(this);

  Panel1->DoubleBuffered = true;

  s->Parent = Panel1;

  s->Align = alClient;

  s->Visible = true;

  s->SetLanguage(CMLANG_CPP);

  s->EnableColorSyntax();

  s->ShowScrollBar(false);

  s->ShowScrollBar(true);

  s->EnableSplitter(false,true);

  s->EnableSplitter(true,true);

  ::SendMessage(Handle,WM_SETFONT,(int)Panel1->Font->Handle,0);

}

//----------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

  if(OpenDialog->Execute())

  {

    s->OpenFile(OpenDialog->FileName.c_str());

  }

}

//----------------------------------------------------------------------

 

SAST 技术产品 CodeSense 通过信通院工具能力测试 CodeSense源代码缺陷分析平台(SAST)成功通过中国信通院泰尔实验室组织的——“先进网络安全能力验证评估计划第九期 — 应用安全开发测试工具能力”测试。 阅读详情

相关推荐

蓝牙耳机充电仓——功能框架

数据传输:大部分充电仓会跟耳机通信,控制耳机开机、关机和进入可搜索模式等等。蓝牙耳机给大家的生活带来便利,来讲讲TWS蓝牙耳机的搭档充电仓吧!方便携带:如果耳机单独带着,指定能弄丢一个,有了充电仓就安全多了。收纳保护:把珍爱的耳机放入充电仓里,防止丢失、磕碰、刮花等。给耳机充电:提供电力补给,让耳机持续使用。

改变自己现在能改变的,珍惜自己现在所拥有的 8948

BCB与VC的一些区别(不断更新中)

<br />用BCB是万般无奈,硬性要求。无奈归无奈,还是把一些经验总结下来。<br />我还是没有勇气把整个工程文件在BCB里面编译。用VC生成好了DLL,再用用BCB自带的implib.exe工具转换一下。VC的DLL在BCB中用要注意一下几点:<br />1.implib转换的时候,一定要用-a选项。格式是:implib.exe -a BCB.lib VC.dll<br />   也就是说,你必须在vc下生成动态链接库,静态链接库是没办法转换的。<br />2.即便是转换成了BCB的lib,dll文件

snowbabybw的专栏 3529

告别轮询!手把手教你用S32K3的FlexCAN Enhanced FIFO+DMA实现高效CAN FD数据接收

本文详细介绍了如何利用S32K3芯片的FlexCAN Enhanced FIFO与DMA组合方案,实现高效CAN FD数据接收,彻底告别传统轮询和中断模式。通过深度缓冲、智能过滤和DMA联动技术,该方案在5Mbps高负载场景下将CPU占用率从42%降至3%以下,显著提升系统实时性和吞吐量。

weixin_30906185的博客 502

BCB调用VC的DLL(补充)

之前的博文: https://blog.youkuaiyun.com/phy0292/article/details/52531983 讲到了BCB如何调用VC编译的DLL,做一下补充。 有时VC编译DLL后,用coff2omf把它的LIB文件转换成BCB的LIB还是无法使用,原因是BCB要求LIB中的C函数名要有下划线开头,而VC有时设置编译时导出的函数没有以下划线开头,所以BCB链接时会提示没有这些函...

phy0292的专栏 888

CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试

前面CODESY下载安装并熟悉了,p-net搭建从站也已经跑在虚拟机树莓派上了,我们只需要快速搭建一个profinet主站来和从站进行交互即可,这里我们直接用Windows下带的软PLC搭建profinet主站并和p-net的demo从站程序进行IO交互。评估是否进行Windows下的运行时PLC前先看一下注意事项,Windows下安装配置会需要修改boot及防火墙等,可能会影响Windows电脑的正常使用,所以创建项目时的设备可以选择非RTE的。

逍遥游的博客 7312

百度网盘开放平台OAuth 2.0授权全流程解析

本文详细解析了百度网盘开放平台OAuth 2.0授权全流程,包括创建应用、获取凭证、授权码模式详解以及access_token的使用与刷新。通过实际案例和代码示例,帮助开发者快速掌握接口调用技巧,避免常见错误,确保安全高效地接入百度网盘API。

wind6的博客 1266

VC与BCB库文件之间的转换问题

经常碰到类似BCB contains invalid OMF record,type 0x21(possibly COFF)错误,该错误是由于BCB使用VC的lib兼容不足导致。 解决方法(1):从vc生成的动态库导出c++builder可用的导入库(注意:不是静态库),在Borland目录下找到Borland\CBuilder6\Bin里面有一个implib.exe,它可以将VC的DLL转译为

lcfeng1982的专栏 8558

【推荐100个unity插件】将UE的资源导出到unity使用—— Exporter for Unreal to/for Unity插件

Unreal to Unity导出器是一款帮助开发者将Unreal Engine项目转换为Unity的工具。文章详细介绍了使用步骤:1)安装虚幻引擎并创建项目;2)在Plugins文件夹中安装导出插件;3)导入UE资产到Content文件夹;4)配置导出参数并完成转换。文末推荐了多个Unity开发专栏,涵盖C#编程、2D/3D开发、特效制作等内容。作者向宇提供了博客地址,欢迎读者交流学习。该工具能有效提升项目迁移效率,适合需要跨引擎开发的用户使用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 848

如何解决window路径超长导致代码编译报错的问题?

早期的window设计对文件路径长度有260个字符最大限制,使得某些应用会无法支持超长路径,这个问题也影响至今,例如笔者碰到在window server 2012上由于checkout的代码路径前面有太多字符,导致某些.net代码的路径超长,MSBUILD编译时会报错,查了下.net 编译器msbuild最新的说明,貌似支持的还不是很好,挺麻烦的。 后来想到了别的办法来解决,...

omage的专栏 1206

数据行小于列索引,内部模式表示可能存在问题

通过检查数据源的完整性和一致性,检查Debezium配置,检查列映射以及启用调试模式和日志记录,您应该能够解决这个错误。请注意,具体的解决方法可能因您的具体情况而异,因此您可能需要根据问题的根本原因进行适当的调整和修复。如果问题仍然存在,您可能需要进一步检查您的数据和配置,并根据具体情况进行调整和修复。在Debezium中,您可以使用列重命名和列映射来定义源和目标之间的列映射关系。通过检查日志,您可以查看详细的错误信息和堆栈跟踪,从而更好地理解问题的根本原因。首先,我们应该检查数据源的完整性和一致性。

XbtoMemory的博客 730

ZYNQ BRAM实现PS与PL数据交互

有时CPU需要与PL进行小批量的数据交换,可以通过BRAM模块,也就是Block RAM实现此要求。本章通过Zynq的GP Master接口读写PL端的BRAM,实现与PL的交互。在本实验中加入了自定义的FPGA程序,并利用AXI4总线进行配置,通知其何时读写BRAM。以下为本实验原理图,CPU通过AXI BRAM Controller读取BRAM数据,CPU仅配置自定义的PL BRAM Controller 的寄存器,不通过它读写数据。

baidu_34971492的博客 2276

.9图片报的错

说的是Windows的路径过长,超过240个字符。 二.解决办法: 1.把需要导入的工程放在硬盘根目录,然后从新导入。 2.在整个工程的build.gradle文件中添加如下代码: allprojects { repositories { jcenter() } buildDir="C:/android_demo/${root

qq_34545643的博客 302

深入浅出AXI协议(2)——通道及信号

本文我们继续AXI协议的学习,我们将讨论5个通道的具体内容和相对应的信号。这一部分的内容现在对于大家来说可能很难理解,但是没有关系,随着学习的深入,我们会逐步讲解这里面的所有现在,现在只需要把它们当作一个可以查阅的手册,快速阅读有一个基本的印象即可。

apple_53311083的博客 1798

【C#】简单解决PathTooLong的Exception

前提windows系统路径的最大长度限制是260个字符(听说.Net 4.6.2,取消了这个限制),而Linux或者Unix系统的好像是4K个字符。所以如果一个文件夹由Linux系统创建,然后由windows系统读取处理的话,就会出现PathTooLong的异常。解决方法其实很简单 在VS中添加如下Nuget包: 在用到的地方把系统的File和Directory替换为LongPathFile和Lon

catshitone的专栏 2818

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

BCB TOpenDialog组件的典型用法

打开对话框是用TOpenDialog组件实现的,TOpenDialog组件是非可视组件。Filter属性用于设置文件过滤器,让对话框只列出特定类型的文件。在设计时可以单击Filter属性旁的省略号.按钮,打开Filter... “打开”对话框是用TOpenDialog组件实现的,TOpenDialog组件是非可视组件。  Filter属性用于设置文件过滤器,让对话框只列出特定类型的文件。在设计

kyfvc的专栏 3851

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深入C++ Builder之编写自己的元件-深入分析VCL继承、消息机制

这篇文章提及内容可能大家已经在很多地方看到过了,作者也是如此,只不过还看了很多VCL源代码,加上自己实际编写元件的经验,拼凑了这么一篇文章。所以所有言论都是个人观点、经验的描述,仅供参考。 你可转载,拷贝,但必须加入作者署名Aweay,如果用于商业目的,必须经过作者同意。 系统要求 如果你想一起跟着做的话,那么你应该看看这里,否则你可以直接跳过。 C++ Builder6 + updata

zb872676223的专栏 2216

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

在C++Builder中,TSaveDialog控件的基本用法

/ 指定默认打开对话框的路径, 该路径是当前工程文件的工作目录。// 可以支持txt文件或者任意文件。// 默认的文件扩展名。1、 TSaveDialog 文件保存对话框控件,(能够支持多种文件过滤器) 在Form设计器中添加该控件。选择好了之后 :: SaveDialog1->FileName 是保存后的文件路径。属性:Filter 文件过滤器,支持保存的文件种类。

fall_on_me的博客 1034

删除文件时提示找不到项目

问题图示 问题原因 路径太长导致系统无法解析路径中的文件 解决办法 从最外层的目录开始,将目录的名称改为一个字符, 多改几层 修改前目录结构 修改后目录结构

kmswilliam的博客 322

一款好用的国产软件源代码缺陷分析平台 — CodeSense

采用业界先进的值流图分析技术,能够实现跨程序/跨文件的上下文敏感分析与对象敏感分析,精准的检测软件安全漏洞与质量缺陷,结合独有的智慧减负与黑白名单技术,服务于安全部门或研发团队。

ubisectech的博客 4838

VC-MFC封装柱形图标控件CBarChart

内容    *介绍        *开发背景        *代码的应用                &gt;创建柱形图                &gt;标题文本和背景色                &gt;添加柱形图                &gt;网格,标签和提示工具                &gt;缩放功能                &gt;删除柱形图       ...

大飞哥的专栏 1591

VC++中把窗体封装到dll中并调用

在DLL中使用资源 现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题。这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题。 1.Win32 DLL 在Win32 DLL中使用对话框很简单,你只需要在你的DLL中添加对话框资源,而且可以在对话框上面设置你所需要的控件。然后使用DialogBox或者Crea

xiliang_pan的专栏 2470

VC DLL内封装MicroDraw ActiveX控件;C#内再调用DLL

AsocxDll 有vc2010 创建; 生成MFC DLL库; 此dll内填出对话框,对话框内会嵌有OCX控件; CSHAP调用DLL 演示在C#中如何调用dll 转载于:https://www.cnblogs.com/asuo/p/5634706.html...

weixin_30617797的博客 235

在vc中自定义事件扩展控件功能

当MFC所提供的控件不能满足我们的要求时,我们需要为控件进行功能扩展,根据需求自定义控件的事件。 本文以一个扩展按钮的鼠标按下和鼠标松开的事件为例,其它控件事件扩展可遵照该例。提供源代码,在VC6.0中调试成功。 按钮也是一个窗口,继承自CWND,它其中封装了大量的消息,因此我们之需要继承CButton,然后添加我们需要的事件对控件进行扩展即可。 在开发过程中,只需要

萧戈的专栏 1444

如何利用codesense的GJB8114模板对c++源码进行进行规则检测

编程规范或标准的落实,⼀⽅⾯可以使代码开发⼈员在编程过程中遵守规则,从⽽保证代码的可理解性和可维护性,进而提高代码质量;另⼀⽅⾯也可以让测试⼈员按照规则来检查代码,及时发现代码问题。...

m0_50579386的博客 1987
上一篇: 用代码控制新建Console的位置大小
下一篇: 在C++ Builder中使用Delphi附带的Zlib封装类
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值