patch 9.0.0698: VisVim is outdated, does not work with current Visual Studio

Problem:    VisVim is outdated, does not work with current Visual Studio.
Solution:   Remove VisVim. (Martin Tournoij)
This commit is contained in:
Martin Tournoij 2022-10-08 17:15:28 +01:00 committed by Bram Moolenaar
parent 16dab41537
commit 251c1e2ed8
44 changed files with 13 additions and 3298 deletions

View File

@ -590,30 +590,9 @@ SRC_DOS = \
nsis/README.txt \
nsis/lang/*.nsi \
uninstall.txt \
src/VisVim/Commands.cpp \
src/VisVim/Commands.h \
src/VisVim/DSAddIn.cpp \
src/VisVim/DSAddIn.h \
src/VisVim/OleAut.cpp \
src/VisVim/OleAut.h \
src/VisVim/README_VisVim.txt \
src/VisVim/Reg.cpp \
src/VisVim/Register.bat \
src/VisVim/Resource.h \
src/VisVim/StdAfx.cpp \
src/VisVim/StdAfx.h \
src/VisVim/UnRegist.bat \
src/VisVim/VisVim.cpp \
src/VisVim/VisVim.def \
src/VisVim/VisVim.mak \
src/VisVim/VisVim.h \
src/VisVim/VisVim.odl \
src/VisVim/VisVim.rc \
src/VisVim/VsReadMe.txt \
# source files for DOS without CR/LF translation (also in the extra archive)
SRC_DOS_BIN = \
src/VisVim/Res/*.bmp \
src/tearoff.bmp \
src/tools.bmp \
src/vim*.ico \
@ -945,7 +924,6 @@ EXTRA = \
$(RT_EXTRA) \
$(SRC_EXTRA) \
README_extra.txt \
src/VisVim/VisVim.dll \
runtime/vimlogo.xpm \
# files in READMEdir that are included from the top dir

View File

@ -198,8 +198,6 @@ MINOR = 0
# - copy these files (get them from a binary archive or build them):
# gvimext.dll in src/GvimExt
# gvimext64.dll in src/GvimExt
# VisVim.dll in src/VisVim
# Note: VisVim needs to be build with MSVC 5, newer versions don't work.
# gvimext64.dll can be obtained from:
# https://github.com/vim/vim-win32-installer/releases
# It is part of gvim_9.0.*_x64.zip as vim/vim90/GvimExt/gvimext64.dll.
@ -554,8 +552,6 @@ dosbin_ole: dist no_title.vim dist/$(COMMENT_OLE)
cp uninstallw32.exe dist/vim/$(VIMRTDIR)/uninstall.exe
cp gvimext.dll dist/vim/$(VIMRTDIR)/gvimext.dll
cp README_ole.txt dist/vim/$(VIMRTDIR)
cp src/VisVim/VisVim.dll dist/vim/$(VIMRTDIR)/VisVim.dll
cp src/VisVim/README_VisVim.txt dist/vim/$(VIMRTDIR)
cd dist && zip -9 -rD -z gvim$(VERSION)ole.zip vim <$(COMMENT_OLE)
cp gvim_ole.pdb dist/gvim$(VERSION)ole.pdb

View File

@ -29,9 +29,6 @@ src/Make_mvc.mak MS Visual C++ makefile for the Win32 GUI.
src/if_ole.* OLE automation interface, for MS Windows 95 and NT.
src/VisVim/* Integration of Win32 GUI with MS Visual Developer
Studio.
src/GvimExt/* DLL for the "Edit with Vim" context menu entry
nsis/* NSIS script to build the self-installing MS-Windows exe

View File

@ -1,6 +1,6 @@
README_ole.txt for version 9.0 of Vim: Vi IMproved.
This archive contains gvim.exe with OLE interface and VisVim.
This archive contains gvim.exe with OLE interface.
This version of gvim.exe can also load a number of interface dynamically (you
can optionally install the .dll files for each interface).
It is only for MS-Windows 95/98/ME/NT/2000/XP.
@ -15,6 +15,3 @@ Win32 with OLE - "MS-Windows 32 bit GUI version with OLE support"
For further information, type this inside Vim:
:help if_ole
Furthermore, this archive contains VISVIM.DLL. It can be used to integrate
the OLE gvim with Microsoft Visual Developer Studio. See VisVim/README.txt.

View File

@ -6,7 +6,6 @@ These files are in the runtime archive (vim90rt.zip).
The DOS source archive contains the files needed to compile Vim on MS-Windows.
It is packed for MS-Windows systems, with CR-LF. It also includes the VisVim
sources.
It is packed for MS-Windows systems, with CR-LF.
See "src/INSTALLpc.txt" for instructions on how to compile Vim on the PC.

View File

@ -27,23 +27,20 @@ To build the installable .exe:
64-bit: src/GvimExt/gvimext64.dll
32-bit: src/GvimExt/gvimext.dll
4. Go to the VisVim directory and build VisVim.dll (or get it from a binary
archive).
5. Get a "diff.exe" program. If you skip this the built-in diff will always
4. Get a "diff.exe" program. If you skip this the built-in diff will always
be used (which is fine for most users). If you do have your own
"diff.exe" put it in the "../.." directory (above the "vim82" directory,
it's the same for all Vim versions).
You can find one in previous Vim versions or in this archive:
http://www.mossbayeng.com/~ron/vim/diffutils.tar.gz
6 Also put winpty32.dll and winpty-agent.exe in "../.." (above the "vim82"
5 Also put winpty32.dll and winpty-agent.exe in "../.." (above the "vim82"
directory). This is required for the terminal window.
7. Do "make uganda.nsis.txt" in runtime/doc. This requires sed, you may have
6. Do "make uganda.nsis.txt" in runtime/doc. This requires sed, you may have
to do this on Unix. Make sure the file is in DOS file format!
8. Get gettext and iconv DLLs from the following site:
7. Get gettext and iconv DLLs from the following site:
https://github.com/mlocati/gettext-iconv-windows/releases
Both 64- and 32-bit versions are needed.
Download the files gettextX.X.X.X-iconvX.XX-shared-{32,64}.zip, extract

View File

@ -36,9 +36,6 @@ Unicode true
# Comment the next line if you do not want to add Native Language Support
!define HAVE_NLS
# Uncomment the next line if you want to include VisVim extension:
#!define HAVE_VIS_VIM
# Comment the following line to create an English-only installer:
!define HAVE_MULTI_LANG
@ -55,9 +52,6 @@ Unicode true
# ----------- No configurable settings below this line -----------
!include "Library.nsh" # For DLL install
!ifdef HAVE_VIS_VIM
!include "UpgradeDLL.nsh" # for VisVim.dll
!endif
!include "LogicLib.nsh"
!include "MUI2.nsh"
!include "nsDialogs.nsh"
@ -536,17 +530,6 @@ SectionGroup $(str_group_plugin) id_group_plugin
SectionEnd
SectionGroupEnd
##########################################################
!ifdef HAVE_VIS_VIM
Section "$(str_section_vis_vim)" id_section_visvim
SectionIn 3
SetOutPath $0
!insertmacro UpgradeDLL "${VIMSRC}\VisVim\VisVim.dll" "$0\VisVim.dll" "$0"
File ${VIMSRC}\VisVim\README_VisVim.txt
SectionEnd
!endif
##########################################################
!ifdef HAVE_NLS
Section "$(str_section_nls)" id_section_nls
@ -634,12 +617,6 @@ Section -post
SectionGetSize ${id_section_editwith} $4
IntOp $3 $3 + $4
${EndIf}
!ifdef HAVE_VIS_VIM
${If} ${SectionIsSelected} ${id_section_visvim}
SectionGetSize ${id_section_visvim} $4
IntOp $3 $3 + $4
${EndIf}
!endif
!ifdef HAVE_NLS
${If} ${SectionIsSelected} ${id_section_nls}
SectionGetSize ${id_section_nls} $4
@ -670,9 +647,6 @@ Section -post
!insertmacro SaveSectionSelection ${id_section_vimrc} "select_vimrc"
!insertmacro SaveSectionSelection ${id_section_pluginhome} "select_pluginhome"
!insertmacro SaveSectionSelection ${id_section_pluginvim} "select_pluginvim"
!ifdef HAVE_VIS_VIM
!insertmacro SaveSectionSelection ${id_section_visvim} "select_visvim"
!endif
!ifdef HAVE_NLS
!insertmacro SaveSectionSelection ${id_section_nls} "select_nls"
!endif
@ -744,9 +718,6 @@ Function .onInit
!insertmacro LoadSectionSelection ${id_section_vimrc} "select_vimrc"
!insertmacro LoadSectionSelection ${id_section_pluginhome} "select_pluginhome"
!insertmacro LoadSectionSelection ${id_section_pluginvim} "select_pluginvim"
!ifdef HAVE_VIS_VIM
!insertmacro LoadSectionSelection ${id_section_visvim} "select_visvim"
!endif
!ifdef HAVE_NLS
!insertmacro LoadSectionSelection ${id_section_nls} "select_nls"
!endif
@ -921,9 +892,6 @@ FunctionEnd
!insertmacro MUI_DESCRIPTION_TEXT ${id_group_plugin} $(str_desc_plugin)
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_pluginhome} $(str_desc_plugin_home)
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_pluginvim} $(str_desc_plugin_vim)
!ifdef HAVE_VIS_VIM
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_visvim} $(str_desc_vis_vim)
!endif
!ifdef HAVE_NLS
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_nls} $(str_desc_nls)
!endif
@ -947,13 +915,6 @@ Section "un.$(str_unsection_register)" id_unsection_register
# created. Thus the "vim61" directory is included in it.
StrCpy $0 "$INSTDIR"
!ifdef HAVE_VIS_VIM
# If VisVim was installed, unregister the DLL.
${If} ${FileExists} "$0\VisVim.dll"
ExecWait "regsvr32.exe /u /s $0\VisVim.dll"
${EndIf}
!endif
# delete the context menu entry and batch files
DetailPrint "$(str_msg_unregistering)"
nsExec::Exec "$0\uninstall.exe -nsis"
@ -1046,9 +1007,6 @@ Section "un.$(str_unsection_exe)" id_unsection_exe
RMDir /r $0\syntax
RMDir /r $0\tools
RMDir /r $0\tutor
!ifdef HAVE_VIS_VIM
RMDir /r $0\VisVim
!endif
RMDir /r $0\lang
RMDir /r $0\keymap
Delete $0\*.exe

View File

@ -79,9 +79,6 @@ LangString str_desc_plugin_home ${LANG_DANISH} "Opret plugin-mapper i HO
LangString str_section_plugin_vim ${LANG_DANISH} "Delte"
LangString str_desc_plugin_vim ${LANG_DANISH} "Opret plugin-mapper i Vim-installationsmappe, det bruges af alle på systemet."
LangString str_section_vis_vim ${LANG_DANISH} "VisVim-udvidelser"
LangString str_desc_vis_vim ${LANG_DANISH} "VisVim-udvidelser til integrering i Microsoft Visual Studio."
LangString str_section_nls ${LANG_DANISH} "Understøttelse af modersmål"
LangString str_desc_nls ${LANG_DANISH} "Installer filer til understøttelse af modersmål."

View File

@ -123,11 +123,6 @@ LangString str_desc_plugin_vim ${LANG_DUTCH} \
"Creëer plugin mappen in Vim installatie map, deze worden gebruikt \
voor iedereen op het systeem."
LangString str_section_vis_vim ${LANG_DUTCH} \
"VisVim extensie"
LangString str_desc_vis_vim ${LANG_DUTCH} \
"VisVim extensie voor Microsoft Visual Studio integratie."
LangString str_section_nls ${LANG_DUTCH} \
"Ondersteuning voor andere talen"
LangString str_desc_nls ${LANG_DUTCH} \

View File

@ -121,11 +121,6 @@ LangString str_desc_plugin_vim ${LANG_ENGLISH} \
"Create plugin directories in Vim install directory, it is used for \
everybody on the system."
LangString str_section_vis_vim ${LANG_ENGLISH} \
"VisVim Extension"
LangString str_desc_vis_vim ${LANG_ENGLISH} \
"VisVim Extension for Microsoft Visual Studio integration."
LangString str_section_nls ${LANG_ENGLISH} \
"Native Language Support"
LangString str_desc_nls ${LANG_ENGLISH} \

View File

@ -122,11 +122,6 @@ LangString str_desc_plugin_vim ${LANG_GERMAN} \
"Plugin-Verzeichnisse im Vim-Installationsverzeichnis erstellen. Diese werden \
für alle Benutzer dieses Systems genutzt."
LangString str_section_vis_vim ${LANG_GERMAN} \
"VisVim-Erweiterung"
LangString str_desc_vis_vim ${LANG_GERMAN} \
"VisVim-Erweiterung zur Integration in Microsoft Visual Studio."
LangString str_section_nls ${LANG_GERMAN} \
"Unterstützung für andere Sprachen"
LangString str_desc_nls ${LANG_GERMAN} \

View File

@ -123,11 +123,6 @@ LangString str_desc_plugin_vim ${LANG_ITALIAN} \
"Crea directory per plugin nella directory di installazione di Vim \
per uso da parte di tutti gli utenti di questo sistema."
LangString str_section_vis_vim ${LANG_ITALIAN} \
"Estensione VisVim"
LangString str_desc_vis_vim ${LANG_ITALIAN} \
"Estensione VisVim per integrazione con Microsoft Visual Studio."
LangString str_section_nls ${LANG_ITALIAN} \
"Supporto Multilingue (NLS)"
LangString str_desc_nls ${LANG_ITALIAN} \

View File

@ -128,11 +128,6 @@ LangString str_section_plugin_vim ${LANG_JAPANESE} \
LangString str_desc_plugin_vim ${LANG_JAPANESE} \
"プラグインディレクトリを Vim のインストールディレクトリに作成します。システムの全員で共有されます。"
LangString str_section_vis_vim ${LANG_JAPANESE} \
"VisVim 拡張"
LangString str_desc_vis_vim ${LANG_JAPANESE} \
"Microsoft Visual Studio 統合用の VisVim 拡張。"
LangString str_section_nls ${LANG_JAPANESE} \
"多言語サポート"
LangString str_desc_nls ${LANG_JAPANESE} \

View File

@ -125,11 +125,6 @@ LangString str_desc_plugin_vim ${LANG_RUSSIAN} \
Модули в этом каталоге будут доступны для любого пользователя \
зарегистрировавшегося в системе"
LangString str_section_vis_vim ${LANG_RUSSIAN} \
"Подключаемый модуль VisVim"
LangString str_desc_vis_vim ${LANG_RUSSIAN} \
"Подключаемый модуль VisVim используется для интеграции с Microsoft Visual Studio"
LangString str_section_nls ${LANG_RUSSIAN} \
"Поддержка региональных языков"
LangString str_desc_nls ${LANG_RUSSIAN} \

View File

@ -121,11 +121,6 @@ LangString str_desc_plugin_vim ${LANG_SERBIAN} \
"Креира директоријуме додатака у Vim инсталационом директоријуму, користе их сви \
на систему."
LangString str_section_vis_vim ${LANG_SERBIAN} \
"VisVim проширење"
LangString str_desc_vis_vim ${LANG_SERBIAN} \
"VisVim проширење за Microsoft Visual Studio интеграцију."
LangString str_section_nls ${LANG_SERBIAN} \
"Подршка за домаћи језик"
LangString str_desc_nls ${LANG_SERBIAN} \

View File

@ -120,11 +120,6 @@ LangString str_desc_plugin_vim ${LANG_SIMPCHINESE} \
"在 Vim 安装目录下创建(空的)插件目录结构,系统上所有用户都能使用安装在\
该目录下的扩展插件。"
LangString str_section_vis_vim ${LANG_SIMPCHINESE} \
"VisVim 插件"
LangString str_desc_vis_vim ${LANG_SIMPCHINESE} \
"安装与 Visual Studio 集成的 VisVim 插件。"
LangString str_section_nls ${LANG_SIMPCHINESE} \
"安装多语言支持"
LangString str_desc_nls ${LANG_SIMPCHINESE} \

View File

@ -121,11 +121,6 @@ LangString str_desc_plugin_vim ${LANG_TRADCHINESE} \
"在 Vim 安裝資料夾下建立(空的)插件資料夾結構,電腦上所有用戶都能使用安裝\
在該資料夾里的擴展插件。"
LangString str_section_vis_vim ${LANG_TRADCHINESE} \
"安裝 VisVim 插件"
LangString str_desc_vis_vim ${LANG_TRADCHINESE} \
"VisVim 是用于與微軟 Microsoft Visual Studio 軟體進行整合的插件。"
LangString str_section_nls ${LANG_TRADCHINESE} \
"安裝本地語言支持"
LangString str_desc_nls ${LANG_TRADCHINESE} \

View File

@ -90,11 +90,6 @@ LangString str_desc_plugin_vim ${LANG_TURKISH} \
"Eklenti dizinlerini Vim yükleme dizininde oluşturur. Bu eklentilerden \
bilgisayarın tüm kullanıcıları yararlanabilir."
LangString str_section_vis_vim ${LANG_TURKISH} \
"VisVim eklentisi"
LangString str_desc_vis_vim ${LANG_TURKISH} \
"Microsoft Visual Studio entegrasyonu için VisVim eklentisi"
LangString str_section_nls ${LANG_TURKISH} \
"Ek dil desteği"
LangString str_desc_nls ${LANG_TURKISH} \

View File

@ -1,4 +1,4 @@
*if_ole.txt* For Vim version 9.0. Last change: 2019 Dec 07
*if_ole.txt* For Vim version 9.0. Last change: 2022 Oct 08
VIM REFERENCE MANUAL by Paul Moore
@ -156,18 +156,14 @@ To avoid the message box that pops up to report the result, prepend "-silent":
gvim -silent -unregister
==============================================================================
5. MS Visual Studio integration *MSVisualStudio* *VisVim*
5. MS Visual Studio integration *MSVisualStudio*
The OLE version can be used to run Vim as the editor in Microsoft Visual
Studio. This is called "VisVim". It is included in the archive that contains
the OLE version. The documentation can be found in the runtime directory, the
README_VisVim.txt file.
The old "VisVim" integration was removed from Vim in patch 9.0.0698.
Using Vim with Visual Studio .Net~
With .Net you no longer really need VisVim, since .Net studio has support for
external editors. Follow these directions:
.Net studio has support for external editors. Follow these directions:
In .Net Studio choose from the menu Tools->External Tools...
Add

View File

@ -1,710 +0,0 @@
#include "stdafx.h"
#include <comdef.h> // For _bstr_t
#include "VisVim.h"
#include "Commands.h"
#include "OleAut.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// Change directory before opening file?
#define CD_SOURCE 0 // Cd to source path
#define CD_SOURCE_PARENT 1 // Cd to parent directory of source path
#define CD_NONE 2 // No cd
static BOOL g_bEnableVim = TRUE; // Vim enabled
static BOOL g_bDevStudioEditor = FALSE; // Open file in Dev Studio editor simultaneously
static BOOL g_bNewTabs = FALSE;
static int g_ChangeDir = CD_NONE; // CD after file open?
static void VimSetEnableState(BOOL bEnableState);
static BOOL VimOpenFile(BSTR& FileName, long LineNr);
static DISPID VimGetDispatchId(COleAutomationControl& VimOle, char* Method);
static void VimErrDiag(COleAutomationControl& VimOle);
static void VimChangeDir(COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName);
static void DebugMsg(char* Msg, char* Arg = NULL);
/////////////////////////////////////////////////////////////////////////////
// CCommands
CCommands::CCommands()
{
// m_pApplication == NULL; M$ Code generation bug!!!
m_pApplication = NULL;
m_pApplicationEventsObj = NULL;
m_pDebuggerEventsObj = NULL;
}
CCommands::~CCommands()
{
ASSERT(m_pApplication != NULL);
if (m_pApplication)
{
m_pApplication->Release();
m_pApplication = NULL;
}
}
void CCommands::SetApplicationObject(IApplication * pApplication)
{
// This function assumes pApplication has already been AddRef'd
// for us, which CDSAddIn did in its QueryInterface call
// just before it called us.
m_pApplication = pApplication;
if (! m_pApplication)
return;
// Create Application event handlers
XApplicationEventsObj::CreateInstance(&m_pApplicationEventsObj);
if (! m_pApplicationEventsObj)
{
ReportInternalError("XApplicationEventsObj::CreateInstance");
return;
}
m_pApplicationEventsObj->AddRef();
m_pApplicationEventsObj->Connect(m_pApplication);
m_pApplicationEventsObj->m_pCommands = this;
#ifdef NEVER
// Create Debugger event handler
CComPtr < IDispatch > pDebugger;
if (SUCCEEDED(m_pApplication->get_Debugger(&pDebugger))
&& pDebugger != NULL)
{
XDebuggerEventsObj::CreateInstance(&m_pDebuggerEventsObj);
m_pDebuggerEventsObj->AddRef();
m_pDebuggerEventsObj->Connect(pDebugger);
m_pDebuggerEventsObj->m_pCommands = this;
}
#endif
// Get settings from registry HKEY_CURRENT_USER\Software\Vim\VisVim
HKEY hAppKey = GetAppKey("Vim");
if (hAppKey)
{
HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
if (hSectionKey)
{
g_bEnableVim = GetRegistryInt(hSectionKey, "EnableVim",
g_bEnableVim);
g_bDevStudioEditor = GetRegistryInt(hSectionKey,
"DevStudioEditor", g_bDevStudioEditor);
g_bNewTabs = GetRegistryInt(hSectionKey, "NewTabs",
g_bNewTabs);
g_ChangeDir = GetRegistryInt(hSectionKey, "ChangeDir",
g_ChangeDir);
RegCloseKey(hSectionKey);
}
RegCloseKey(hAppKey);
}
}
void CCommands::UnadviseFromEvents()
{
ASSERT(m_pApplicationEventsObj != NULL);
if (m_pApplicationEventsObj)
{
m_pApplicationEventsObj->Disconnect(m_pApplication);
m_pApplicationEventsObj->Release();
m_pApplicationEventsObj = NULL;
}
#ifdef NEVER
if (m_pDebuggerEventsObj)
{
// Since we were able to connect to the Debugger events, we
// should be able to access the Debugger object again to
// unadvise from its events (thus the VERIFY_OK below--see
// stdafx.h).
CComPtr < IDispatch > pDebugger;
VERIFY_OK(m_pApplication->get_Debugger(&pDebugger));
ASSERT(pDebugger != NULL);
m_pDebuggerEventsObj->Disconnect(pDebugger);
m_pDebuggerEventsObj->Release();
m_pDebuggerEventsObj = NULL;
}
#endif
}
/////////////////////////////////////////////////////////////////////////////
// Event handlers
// Application events
HRESULT CCommands::XApplicationEvents::BeforeBuildStart()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
HRESULT CCommands::XApplicationEvents::BuildFinish(long nNumErrors, long nNumWarnings)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
HRESULT CCommands::XApplicationEvents::BeforeApplicationShutDown()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
// The open document event handle is the place where the real interface work
// is done.
// Vim gets called from here.
//
HRESULT CCommands::XApplicationEvents::DocumentOpen(IDispatch * theDocument)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (! g_bEnableVim)
// Vim not enabled or empty command line entered
return S_OK;
// First get the current file name and line number
// Get the document object
CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(theDocument);
if (! pDoc)
return S_OK;
BSTR FileName;
long LineNr = -1;
// Get the document name
if (FAILED(pDoc->get_FullName(&FileName)))
return S_OK;
LPDISPATCH pDispSel;
// Get a selection object dispatch pointer
if (SUCCEEDED(pDoc->get_Selection(&pDispSel)))
{
// Get the selection object
CComQIPtr < ITextSelection, &IID_ITextSelection > pSel(pDispSel);
if (pSel)
// Get the selection line number
pSel->get_CurrentLine(&LineNr);
pDispSel->Release();
}
// Open the file in Vim and position to the current line
if (VimOpenFile(FileName, LineNr))
{
if (! g_bDevStudioEditor)
{
// Close the document in developer studio
CComVariant vSaveChanges = dsSaveChangesPrompt;
DsSaveStatus Saved;
pDoc->Close(vSaveChanges, &Saved);
}
}
// We're done here
SysFreeString(FileName);
return S_OK;
}
HRESULT CCommands::XApplicationEvents::BeforeDocumentClose(IDispatch * theDocument)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
HRESULT CCommands::XApplicationEvents::DocumentSave(IDispatch * theDocument)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
HRESULT CCommands::XApplicationEvents::NewDocument(IDispatch * theDocument)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (! g_bEnableVim)
// Vim not enabled or empty command line entered
return S_OK;
// First get the current file name and line number
CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(theDocument);
if (! pDoc)
return S_OK;
BSTR FileName;
HRESULT hr;
hr = pDoc->get_FullName(&FileName);
if (FAILED(hr))
return S_OK;
// Open the file in Vim and position to the current line
if (VimOpenFile(FileName, 0))
{
if (! g_bDevStudioEditor)
{
// Close the document in developer studio
CComVariant vSaveChanges = dsSaveChangesPrompt;
DsSaveStatus Saved;
pDoc->Close(vSaveChanges, &Saved);
}
}
SysFreeString(FileName);
return S_OK;
}
HRESULT CCommands::XApplicationEvents::WindowActivate(IDispatch * theWindow)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
HRESULT CCommands::XApplicationEvents::WindowDeactivate(IDispatch * theWindow)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
HRESULT CCommands::XApplicationEvents::WorkspaceOpen()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
HRESULT CCommands::XApplicationEvents::WorkspaceClose()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
HRESULT CCommands::XApplicationEvents::NewWorkspace()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
// Debugger event
HRESULT CCommands::XDebuggerEvents::BreakpointHit(IDispatch * pBreakpoint)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return S_OK;
}
/////////////////////////////////////////////////////////////////////////////
// VisVim dialog
class CMainDialog : public CDialog
{
public:
CMainDialog(CWnd * pParent = NULL); // Standard constructor
//{{AFX_DATA(CMainDialog)
enum { IDD = IDD_ADDINMAIN };
int m_ChangeDir;
BOOL m_bDevStudioEditor;
BOOL m_bNewTabs;
//}}AFX_DATA
//{{AFX_VIRTUAL(CMainDialog)
protected:
virtual void DoDataExchange(CDataExchange * pDX); // DDX/DDV support
//}}AFX_VIRTUAL
protected:
//{{AFX_MSG(CMainDialog)
afx_msg void OnEnable();
afx_msg void OnDisable();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CMainDialog::CMainDialog(CWnd * pParent /* =NULL */ )
: CDialog(CMainDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CMainDialog)
m_ChangeDir = -1;
m_bDevStudioEditor = FALSE;
m_bNewTabs = FALSE;
//}}AFX_DATA_INIT
}
void CMainDialog::DoDataExchange(CDataExchange * pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMainDialog)
DDX_Radio(pDX, IDC_CD_SOURCE_PATH, m_ChangeDir);
DDX_Check(pDX, IDC_DEVSTUDIO_EDITOR, m_bDevStudioEditor);
DDX_Check(pDX, IDC_NEW_TABS, m_bNewTabs);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMainDialog, CDialog)
//{{AFX_MSG_MAP(CMainDialog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCommands methods
STDMETHODIMP CCommands::VisVimDialog()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// Use m_pApplication to access the Developer Studio Application
// object,
// and VERIFY_OK to see error strings in DEBUG builds of your add-in
// (see stdafx.h)
VERIFY_OK(m_pApplication->EnableModeless(VARIANT_FALSE));
CMainDialog Dlg;
Dlg.m_bDevStudioEditor = g_bDevStudioEditor;
Dlg.m_bNewTabs = g_bNewTabs;
Dlg.m_ChangeDir = g_ChangeDir;
if (Dlg.DoModal() == IDOK)
{
g_bDevStudioEditor = Dlg.m_bDevStudioEditor;
g_bNewTabs = Dlg.m_bNewTabs;
g_ChangeDir = Dlg.m_ChangeDir;
// Save settings to registry HKEY_CURRENT_USER\Software\Vim\VisVim
HKEY hAppKey = GetAppKey("Vim");
if (hAppKey)
{
HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
if (hSectionKey)
{
WriteRegistryInt(hSectionKey, "DevStudioEditor",
g_bDevStudioEditor);
WriteRegistryInt(hSectionKey, "NewTabs",
g_bNewTabs);
WriteRegistryInt(hSectionKey, "ChangeDir", g_ChangeDir);
RegCloseKey(hSectionKey);
}
RegCloseKey(hAppKey);
}
}
VERIFY_OK(m_pApplication->EnableModeless(VARIANT_TRUE));
return S_OK;
}
STDMETHODIMP CCommands::VisVimEnable()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
VimSetEnableState(true);
return S_OK;
}
STDMETHODIMP CCommands::VisVimDisable()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
VimSetEnableState(false);
return S_OK;
}
STDMETHODIMP CCommands::VisVimToggle()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
VimSetEnableState(! g_bEnableVim);
return S_OK;
}
STDMETHODIMP CCommands::VisVimLoad()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// Use m_pApplication to access the Developer Studio Application object,
// and VERIFY_OK to see error strings in DEBUG builds of your add-in
// (see stdafx.h)
CComBSTR bStr;
// Define dispatch pointers for document and selection objects
CComPtr < IDispatch > pDispDoc, pDispSel;
// Get a document object dispatch pointer
VERIFY_OK(m_pApplication->get_ActiveDocument(&pDispDoc));
if (! pDispDoc)
return S_OK;
BSTR FileName;
long LineNr = -1;
// Get the document object
CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(pDispDoc);
if (! pDoc)
return S_OK;
// Get the document name
if (FAILED(pDoc->get_FullName(&FileName)))
return S_OK;
// Get a selection object dispatch pointer
if (SUCCEEDED(pDoc->get_Selection(&pDispSel)))
{
// Get the selection object
CComQIPtr < ITextSelection, &IID_ITextSelection > pSel(pDispSel);
if (pSel)
// Get the selection line number
pSel->get_CurrentLine(&LineNr);
}
// Open the file in Vim
VimOpenFile(FileName, LineNr);
SysFreeString(FileName);
return S_OK;
}
//
// Here we do the actual processing and communication with Vim
//
// Set the enable state and save to registry
//
static void VimSetEnableState(BOOL bEnableState)
{
g_bEnableVim = bEnableState;
HKEY hAppKey = GetAppKey("Vim");
if (hAppKey)
{
HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
if (hSectionKey)
WriteRegistryInt(hSectionKey, "EnableVim", g_bEnableVim);
RegCloseKey(hAppKey);
}
}
// Open the file 'FileName' in Vim and goto line 'LineNr'
// 'FileName' is expected to contain an absolute DOS path including the drive
// letter.
// 'LineNr' must contain a valid line number or 0, e. g. for a new file
//
static BOOL VimOpenFile(BSTR& FileName, long LineNr)
{
// OLE automation object for com. with Vim
// When the object goes out of scope, its destructor destroys the OLE
// connection;
// This is important to avoid blocking the object
// (in this memory corruption would be likely when terminating Vim
// while still running DevStudio).
// So keep this object local!
COleAutomationControl VimOle;
// :cd D:/Src2/VisVim/
//
// Get a dispatch id for the SendKeys method of Vim;
// enables connection to Vim if necessary
DISPID DispatchId;
DispatchId = VimGetDispatchId(VimOle, "SendKeys");
if (! DispatchId)
// OLE error, can't obtain dispatch id
goto OleError;
OLECHAR Buf[MAX_OLE_STR];
char FileNameTmp[MAX_OLE_STR];
char VimCmd[MAX_OLE_STR];
char *s, *p;
// Prepend CTRL-\ CTRL-N to exit insert mode
VimCmd[0] = 0x1c;
VimCmd[1] = 0x0e;
VimCmd[2] = 0;
#ifdef SINGLE_WINDOW
// Update the current file in Vim if it has been modified.
// Disabled, because it could write the file when you don't want to.
sprintf(VimCmd + 2, ":up\n");
#endif
if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
goto OleError;
// Change Vim working directory to where the file is if desired
if (g_ChangeDir != CD_NONE)
VimChangeDir(VimOle, DispatchId, FileName);
// Make Vim open the file.
// In the filename convert all \ to /, put a \ before a space.
if (g_bNewTabs)
{
sprintf(VimCmd, ":tab drop ");
s = VimCmd + 10;
}
else
{
sprintf(VimCmd, ":drop ");
s = VimCmd + 6;
}
sprintf(FileNameTmp, "%S", (char *)FileName);
for (p = FileNameTmp; *p != '\0' && s < VimCmd + MAX_OLE_STR - 4; ++p)
if (*p == '\\')
*s++ = '/';
else
{
if (*p == ' ')
*s++ = '\\';
*s++ = *p;
}
*s++ = '\n';
*s = '\0';
if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
goto OleError;
if (LineNr > 0)
{
// Goto line
sprintf(VimCmd, ":%ld\n", LineNr);
if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
goto OleError;
}
// Make Vim come to the foreground
if (! VimOle.Method("SetForeground"))
VimOle.ErrDiag();
// We're done
return true;
OleError:
// There was an OLE error
// Check if it's the "unknown class string" error
VimErrDiag(VimOle);
return false;
}
// Return the dispatch id for the Vim method 'Method'
// Create the Vim OLE object if necessary
// Returns a valid dispatch id or null on error
//
static DISPID VimGetDispatchId(COleAutomationControl& VimOle, char* Method)
{
// Initialize Vim OLE connection if not already done
if (! VimOle.IsCreated())
{
if (! VimOle.CreateObject("Vim.Application"))
return NULL;
}
// Get the dispatch id for the SendKeys method.
// By doing this, we are checking if Vim is still there...
DISPID DispatchId = VimOle.GetDispatchId("SendKeys");
if (! DispatchId)
{
// We can't get a dispatch id.
// This means that probably Vim has been terminated.
// Don't issue an error message here, instead
// destroy the OLE object and try to connect once more
//
// In fact, this should never happen, because the OLE aut. object
// should not be kept long enough to allow the user to terminate Vim
// to avoid memory corruption (why the heck is there no system garbage
// collection for those damned OLE memory chunks???).
VimOle.DeleteObject();
if (! VimOle.CreateObject("Vim.Application"))
// If this create fails, it's time for an error msg
return NULL;
if (! (DispatchId = VimOle.GetDispatchId("SendKeys")))
// There is something wrong...
return NULL;
}
return DispatchId;
}
// Output an error message for an OLE error
// Check on the classstring error, which probably means Vim wasn't registered.
//
static void VimErrDiag(COleAutomationControl& VimOle)
{
SCODE sc = GetScode(VimOle.GetResult());
if (sc == CO_E_CLASSSTRING)
{
char Buf[256];
sprintf(Buf, "There is no registered OLE automation server named "
"\"Vim.Application\".\n"
"Use the OLE-enabled version of Vim with VisVim and "
"make sure to register Vim by running \"vim -register\".");
MessageBox(NULL, Buf, "OLE Error", MB_OK);
}
else
VimOle.ErrDiag();
}
// Change directory to the directory the file 'FileName' is in or its parent
// directory according to the setting of the global 'g_ChangeDir':
// 'FileName' is expected to contain an absolute DOS path including the drive
// letter.
// CD_NONE
// CD_SOURCE_PATH
// CD_SOURCE_PARENT
//
static void VimChangeDir(COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName)
{
// Do a :cd first
// Get the path name of the file ("dir/")
CString StrFileName = FileName;
char Drive[_MAX_DRIVE];
char Dir[_MAX_DIR];
char DirUnix[_MAX_DIR * 2];
char *s, *t;
_splitpath(StrFileName, Drive, Dir, NULL, NULL);
// Convert to Unix path name format, escape spaces.
t = DirUnix;
for (s = Dir; *s; ++s)
if (*s == '\\')
*t++ = '/';
else
{
if (*s == ' ')
*t++ = '\\';
*t++ = *s;
}
*t = '\0';
// Construct the cd command; append /.. if cd to parent
// directory and not in root directory
OLECHAR Buf[MAX_OLE_STR];
char VimCmd[MAX_OLE_STR];
sprintf(VimCmd, ":cd %s%s%s\n", Drive, DirUnix,
g_ChangeDir == CD_SOURCE_PARENT && DirUnix[1] ? ".." : "");
VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf));
}
#ifdef _DEBUG
// Print out a debug message
//
static void DebugMsg(char* Msg, char* Arg)
{
char Buf[400];
sprintf(Buf, Msg, Arg);
AfxMessageBox(Buf);
}
#endif

View File

@ -1,127 +0,0 @@
// Commands.h : header file
//
#if !defined(AFX_COMMANDS_H__AC726717_2977_11D1_B2F3_006008040780__INCLUDED_)
#define AFX_COMMANDS_H__AC726717_2977_11D1_B2F3_006008040780__INCLUDED_
#include "vsvtypes.h"
class CCommands :
public CComDualImpl < ICommands,
&IID_ICommands,
&LIBID_VisVim >,
public CComObjectRoot,
public CComCoClass < CCommands,
&CLSID_Commands >
{
protected:
IApplication * m_pApplication;
public:
CCommands ();
~CCommands ();
void SetApplicationObject (IApplication * m_pApplication);
IApplication *GetApplicationObject ()
{
return m_pApplication;
}
void UnadviseFromEvents ();
BEGIN_COM_MAP (CCommands)
COM_INTERFACE_ENTRY (IDispatch)
COM_INTERFACE_ENTRY (ICommands)
END_COM_MAP ()
DECLARE_NOT_AGGREGATABLE (CCommands)
protected:
// This class template is used as the base class for the Application
// event handler object and the Debugger event handler object,
// which are declared below.
template < class IEvents,
const IID * piidEvents,
const GUID * plibid,
class XEvents,
const CLSID * pClsidEvents >
class XEventHandler :
public CComDualImpl < IEvents,
piidEvents,
plibid >,
public CComObjectRoot,
public CComCoClass < XEvents,
pClsidEvents >
{
public:
BEGIN_COM_MAP (XEvents)
COM_INTERFACE_ENTRY (IDispatch)
COM_INTERFACE_ENTRY_IID (*piidEvents, IEvents)
END_COM_MAP ()
DECLARE_NOT_AGGREGATABLE (XEvents)
void Connect (IUnknown * pUnk)
{
VERIFY (SUCCEEDED (AtlAdvise (pUnk, this, *piidEvents,
&m_dwAdvise)));
}
void Disconnect (IUnknown * pUnk)
{
AtlUnadvise (pUnk, *piidEvents, m_dwAdvise);
}
CCommands *m_pCommands;
protected:
DWORD m_dwAdvise;
};
// This object handles events fired by the Application object
class XApplicationEvents : public XEventHandler < IApplicationEvents,
&IID_IApplicationEvents,
&LIBID_VisVim,
XApplicationEvents,
&CLSID_ApplicationEvents >
{
public:
// IApplicationEvents methods
STDMETHOD (BeforeBuildStart) (THIS);
STDMETHOD (BuildFinish) (THIS_ long nNumErrors, long nNumWarnings);
STDMETHOD (BeforeApplicationShutDown) (THIS);
STDMETHOD (DocumentOpen) (THIS_ IDispatch * theDocument);
STDMETHOD (BeforeDocumentClose) (THIS_ IDispatch * theDocument);
STDMETHOD (DocumentSave) (THIS_ IDispatch * theDocument);
STDMETHOD (NewDocument) (THIS_ IDispatch * theDocument);
STDMETHOD (WindowActivate) (THIS_ IDispatch * theWindow);
STDMETHOD (WindowDeactivate) (THIS_ IDispatch * theWindow);
STDMETHOD (WorkspaceOpen) (THIS);
STDMETHOD (WorkspaceClose) (THIS);
STDMETHOD (NewWorkspace) (THIS);
};
typedef CComObject < XApplicationEvents > XApplicationEventsObj;
XApplicationEventsObj *m_pApplicationEventsObj;
// This object handles events fired by the Application object
class XDebuggerEvents : public XEventHandler < IDebuggerEvents,
&IID_IDebuggerEvents,
&LIBID_VisVim,
XDebuggerEvents,
&CLSID_DebuggerEvents >
{
public:
// IDebuggerEvents method
STDMETHOD (BreakpointHit) (THIS_ IDispatch * pBreakpoint);
};
typedef CComObject < XDebuggerEvents > XDebuggerEventsObj;
XDebuggerEventsObj *m_pDebuggerEventsObj;
public:
// ICommands methods
STDMETHOD (VisVimDialog) (THIS);
STDMETHOD (VisVimEnable) (THIS);
STDMETHOD (VisVimDisable) (THIS);
STDMETHOD (VisVimToggle) (THIS);
STDMETHOD (VisVimLoad) (THIS);
};
typedef CComObject < CCommands > CCommandsObj;
//{{AFX_INSERT_LOCATION}}
#endif // !defined(AFX_COMMANDS_H__AC726717_2977_11D1_B2F3_006008040780__INCLUDED)

View File

@ -1,160 +0,0 @@
#include "stdafx.h"
#include "VisVim.h"
#include "DSAddIn.h"
#include "Commands.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// This is called when the user first loads the add-in, and on start-up
// of each subsequent Developer Studio session
STDMETHODIMP CDSAddIn::OnConnection (IApplication * pApp, VARIANT_BOOL bFirstTime,
long dwCookie, VARIANT_BOOL * OnConnection)
{
AFX_MANAGE_STATE (AfxGetStaticModuleState ());
*OnConnection = VARIANT_FALSE;
// Store info passed to us
IApplication *pApplication = NULL;
HRESULT hr;
hr = pApp->QueryInterface (IID_IApplication, (void **) &pApplication);
if (FAILED (hr))
{
ReportLastError (hr);
return E_UNEXPECTED;
}
if (pApplication == NULL)
{
ReportInternalError ("IApplication::QueryInterface");
return E_UNEXPECTED;
}
m_dwCookie = dwCookie;
// Create command dispatch, send info back to DevStudio
CCommandsObj::CreateInstance (&m_pCommands);
if (! m_pCommands)
{
ReportInternalError ("CCommandsObj::CreateInstance");
return E_UNEXPECTED;
}
m_pCommands->AddRef ();
// The QueryInterface above AddRef'd the Application object. It will
// be Release'd in CCommand's destructor.
m_pCommands->SetApplicationObject (pApplication);
hr = pApplication->SetAddInInfo ((long) AfxGetInstanceHandle (),
(LPDISPATCH) m_pCommands, IDR_TOOLBAR_MEDIUM, IDR_TOOLBAR_LARGE,
m_dwCookie);
if (FAILED (hr))
{
ReportLastError (hr);
return E_UNEXPECTED;
}
// Inform DevStudio of the commands we implement
if (! AddCommand (pApplication, "VisVimDialog", "VisVimDialogCmd",
IDS_CMD_DIALOG, 0, bFirstTime))
return E_UNEXPECTED;
if (! AddCommand (pApplication, "VisVimEnable", "VisVimEnableCmd",
IDS_CMD_ENABLE, 1, bFirstTime))
return E_UNEXPECTED;
if (! AddCommand (pApplication, "VisVimDisable", "VisVimDisableCmd",
IDS_CMD_DISABLE, 2, bFirstTime))
return E_UNEXPECTED;
if (! AddCommand (pApplication, "VisVimToggle", "VisVimToggleCmd",
IDS_CMD_TOGGLE, 3, bFirstTime))
return E_UNEXPECTED;
if (! AddCommand (pApplication, "VisVimLoad", "VisVimLoadCmd",
IDS_CMD_LOAD, 4, bFirstTime))
return E_UNEXPECTED;
*OnConnection = VARIANT_TRUE;
return S_OK;
}
// This is called on shut-down, and also when the user unloads the add-in
STDMETHODIMP CDSAddIn::OnDisconnection (VARIANT_BOOL bLastTime)
{
AFX_MANAGE_STATE (AfxGetStaticModuleState ());
m_pCommands->UnadviseFromEvents ();
m_pCommands->Release ();
m_pCommands = NULL;
return S_OK;
}
// Add a command to DevStudio
// Creates a toolbar button for the command also.
// 'MethodName' is the name of the method specified in the .odl file
// 'StrResId' the resource id of the descriptive string
// 'GlyphIndex' the image index into the command buttons bitmap
// Return true on success
//
bool CDSAddIn::AddCommand (IApplication* pApp, char* MethodName, char* CmdName,
UINT StrResId, UINT GlyphIndex, VARIANT_BOOL bFirstTime)
{
CString CmdString;
CString CmdText;
CmdText.LoadString (StrResId);
CmdString = CmdName;
CmdString += CmdText;
CComBSTR bszCmdString (CmdString);
CComBSTR bszMethod (MethodName);
CComBSTR bszCmdName (CmdName);
// (see stdafx.h for the definition of VERIFY_OK)
VARIANT_BOOL bRet;
VERIFY_OK (pApp->AddCommand (bszCmdString, bszMethod, GlyphIndex,
m_dwCookie, &bRet));
if (bRet == VARIANT_FALSE)
{
// AddCommand failed because a command with this name already exists.
ReportInternalError ("IApplication::AddCommand");
return FALSE;
}
// Add toolbar buttons only if this is the first time the add-in
// is being loaded. Toolbar buttons are automatically remembered
// by Developer Studio from session to session, so we should only
// add the toolbar buttons once.
if (bFirstTime == VARIANT_TRUE)
VERIFY_OK (pApp->AddCommandBarButton (dsGlyph, bszCmdName, m_dwCookie));
return TRUE;
}
void ReportLastError (HRESULT Err)
{
char *Buf = NULL;
char Msg[512];
FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL, Err,
MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
Buf, 400, NULL);
sprintf (Msg, "Unexpected error (Error code: %lx)\n%s", Err, Buf);
::MessageBox (NULL, Msg, "VisVim", MB_OK | MB_ICONSTOP);
if (Buf)
LocalFree (Buf);
}
void ReportInternalError (char* Fct)
{
char Msg[512];
sprintf (Msg, "Unexpected error\n%s failed", Fct);
::MessageBox (NULL, Msg, "VisVim", MB_OK | MB_ICONSTOP);
}

View File

@ -1,53 +0,0 @@
// DSAddIn.h : header file
//
#if !defined(AFX_DSADDIN_H__AC726715_2977_11D1_B2F3_006008040780__INCLUDED_)
#define AFX_DSADDIN_H__AC726715_2977_11D1_B2F3_006008040780__INCLUDED_
#include "commands.h"
// {4F9E01C0-406B-11d2-8006-00001C405077}
DEFINE_GUID (CLSID_DSAddIn,
0x4f9e01c0, 0x406b, 0x11d2, 0x80, 0x6, 0x0, 0x0, 0x1c, 0x40, 0x50, 0x77);
/////////////////////////////////////////////////////////////////////////////
// CDSAddIn
class CDSAddIn :
public IDSAddIn,
public CComObjectRoot,
public CComCoClass < CDSAddIn,
&CLSID_DSAddIn >
{
public:
DECLARE_REGISTRY (CDSAddIn, "VisVim.DSAddIn.1",
"VisVim Developer Studio Add-in", IDS_VISVIM_LONGNAME,
THREADFLAGS_BOTH)
CDSAddIn ()
{
}
BEGIN_COM_MAP (CDSAddIn)
COM_INTERFACE_ENTRY (IDSAddIn)
END_COM_MAP ()
DECLARE_NOT_AGGREGATABLE (CDSAddIn)
// IDSAddIns
public:
STDMETHOD (OnConnection) (THIS_ IApplication * pApp, VARIANT_BOOL bFirstTime,
long dwCookie, VARIANT_BOOL * OnConnection);
STDMETHOD (OnDisconnection) (THIS_ VARIANT_BOOL bLastTime);
protected:
bool AddCommand (IApplication* pApp, char* MethodName, char* CmdName,
UINT StrResId, UINT GlyphIndex, VARIANT_BOOL bFirstTime);
protected:
CCommandsObj * m_pCommands;
DWORD m_dwCookie;
};
//{{AFX_INSERT_LOCATION}}
#endif // !defined(AFX_DSADDIN_H__AC726715_2977_11D1_B2F3_006008040780__INCLUDED)

View File

@ -1,781 +0,0 @@
//
// Class for creating OLE automation controllers.
//
// CreateObject() creates an automation object
// Invoke() will call a property or method of the automation object.
// GetProperty() returns a property
// SetProperty() changes a property
// Method() invokes a method
//
// For example, the following VB code will control Microsoft Word:
//
// Private Sub Form_Load()
// Dim wb As Object
// Set wb = CreateObject("Word.Basic")
// wb.AppShow
// wb.FileNewDefault
// wb.Insert "This is a test"
// wb.FileSaveAs "c:\sample.doc)"
// End Sub
//
// A C++ automation controller that does the same can be written as follows:
// the helper functions:
//
// Void FormLoad ()
// {
// COleAutomationControl Aut;
// Aut.CreateObject("Word.Basic");
// Aut.Method ("AppShow");
// Aut.Method ("FileNewDefault");
// Aut.Method ("Insert", "s", (LPOLESTR) OLESTR ("This is a test"));
// Aut.Method ("FileSaveAs", "s", OLESTR ("c:\\sample.doc"));
// }
//
//
#include "stdafx.h"
#include <stdarg.h>
#include "oleaut.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
static bool CountArgsInFormat (LPCTSTR Format, UINT* nArgs);
static LPCTSTR GetNextVarType (LPCTSTR Format, VARTYPE* pVarType);
COleAutomationControl::COleAutomationControl ()
{
m_pDispatch = NULL;
m_hResult = NOERROR;
m_nErrArg = 0;
VariantInit (&m_VariantResult);
}
COleAutomationControl::~COleAutomationControl ()
{
DeleteObject ();
}
void COleAutomationControl::DeleteObject ()
{
if (m_pDispatch)
{
m_pDispatch->Release ();
m_pDispatch = NULL;
}
}
// Creates an instance of the Automation object and
// obtains its IDispatch interface.
//
// Parameters:
// ProgId ProgID of Automation object
//
bool COleAutomationControl::CreateObject (char* ProgId)
{
CLSID ClsId; // CLSID of automation object
LPUNKNOWN pUnknown = NULL; // IUnknown of automation object
// Retrieve CLSID from the progID that the user specified
LPOLESTR OleProgId = TO_OLE_STR (ProgId);
m_hResult = CLSIDFromProgID (OleProgId, &ClsId);
if (FAILED (m_hResult))
goto error;
// Create an instance of the automation object and ask for the
// IDispatch interface
m_hResult = CoCreateInstance (ClsId, NULL, CLSCTX_SERVER,
IID_IUnknown, (void**) &pUnknown);
if (FAILED (m_hResult))
goto error;
m_hResult = pUnknown->QueryInterface (IID_IDispatch, (void**) &m_pDispatch);
if (FAILED (m_hResult))
goto error;
pUnknown->Release ();
return true;
error:
if (pUnknown)
pUnknown->Release ();
if (m_pDispatch)
m_pDispatch->Release ();
return false;
}
// Return the dispatch id of a named service
// This id can be used in subsequent calls to GetProperty (), SetProperty () and
// Method (). This is the preferred method when performance is important.
//
DISPID COleAutomationControl::GetDispatchId (char* Name)
{
DISPID DispatchId;
ASSERT (m_pDispatch);
// Get DISPID of property/method
LPOLESTR OleName = TO_OLE_STR (Name);
m_hResult = m_pDispatch->GetIDsOfNames (IID_NULL, &OleName, 1,
LOCALE_USER_DEFAULT, &DispatchId);
if (FAILED (m_hResult))
return NULL;
return DispatchId;
}
// The following functions use these parameters:
//
// Parameters:
//
// Name Name of property or method.
//
// Format Format string that describes the variable list of parameters that
// follows. The format string can contain the following characters.
// & = mark the following format character as VT_BYREF
// B = VT_BOOL
// i = VT_I2
// I = VT_I4
// r = VT_R2
// R = VT_R4
// c = VT_CY
// s = VT_BSTR (string pointer can be passed,
// BSTR will be allocated by this function).
// e = VT_ERROR
// d = VT_DATE
// v = VT_VARIANT. Use this to pass data types that are not described
// in the format string. (For example SafeArrays).
// D = VT_DISPATCH
// U = VT_UNKNOWN
//
// ... Arguments of the property or method.
// Arguments are described by Format.
//
bool COleAutomationControl::GetProperty (char* Name)
{
return Invoke (DISPATCH_PROPERTYGET, Name, NULL, NULL);
}
bool COleAutomationControl::GetProperty (DISPID DispatchId)
{
return Invoke (DISPATCH_PROPERTYGET, DispatchId, NULL, NULL);
}
bool COleAutomationControl::PutProperty (char* Name, LPCTSTR Format, ...)
{
va_list ArgList;
va_start (ArgList, Format);
bool bRet = Invoke (DISPATCH_PROPERTYPUT, Name, Format, ArgList);
va_end (ArgList);
return bRet;
}
bool COleAutomationControl::PutProperty (DISPID DispatchId, LPCTSTR Format, ...)
{
va_list ArgList;
va_start (ArgList, Format);
bool bRet = Invoke (DISPATCH_PROPERTYPUT, DispatchId, Format, ArgList);
va_end (ArgList);
return bRet;
}
bool COleAutomationControl::Method (char* Name, LPCTSTR Format, ...)
{
va_list ArgList;
va_start (ArgList, Format);
bool bRet = Invoke (DISPATCH_METHOD, Name, Format, ArgList);
va_end (ArgList);
return bRet;
}
bool COleAutomationControl::Method (DISPID DispatchId, LPCTSTR Format, ...)
{
va_list ArgList;
va_start (ArgList, Format);
bool bRet = Invoke (DISPATCH_METHOD, DispatchId, Format, ArgList);
va_end (ArgList);
return bRet;
}
bool COleAutomationControl::Invoke (WORD Flags, char* Name,
LPCTSTR Format, va_list ArgList)
{
DISPID DispatchId = GetDispatchId (Name);
if (! DispatchId)
return false;
return Invoke (Flags, DispatchId, Format, ArgList);
}
bool COleAutomationControl::Invoke (WORD Flags, DISPID DispatchId,
LPCTSTR Format, va_list ArgList)
{
UINT ArgCount = 0;
VARIANTARG* ArgVector = NULL;
ASSERT (m_pDispatch);
DISPPARAMS DispatchParams;
memset (&DispatchParams, 0, sizeof (DispatchParams));
// Determine number of arguments
if (Format)
CountArgsInFormat (Format, &ArgCount);
// Property puts have a named argument that represents the value that
// the property is being assigned.
DISPID DispIdNamed = DISPID_PROPERTYPUT;
if (Flags & DISPATCH_PROPERTYPUT)
{
if (ArgCount == 0)
{
m_hResult = ResultFromScode (E_INVALIDARG);
return false;
}
DispatchParams.cNamedArgs = 1;
DispatchParams.rgdispidNamedArgs = &DispIdNamed;
}
if (ArgCount)
{
// Allocate memory for all VARIANTARG parameters
ArgVector = (VARIANTARG*) CoTaskMemAlloc (
ArgCount * sizeof (VARIANTARG));
if (! ArgVector)
{
m_hResult = ResultFromScode (E_OUTOFMEMORY);
return false;
}
memset (ArgVector, 0, sizeof (VARIANTARG) * ArgCount);
// Get ready to walk vararg list
LPCTSTR s = Format;
VARIANTARG *p = ArgVector + ArgCount - 1; // Params go in opposite order
for (;;)
{
VariantInit (p);
if (! (s = GetNextVarType (s, &p->vt)))
break;
if (p < ArgVector)
{
m_hResult = ResultFromScode (E_INVALIDARG);
goto Cleanup;
}
switch (p->vt)
{
case VT_I2:
V_I2 (p) = va_arg (ArgList, short);
break;
case VT_I4:
V_I4 (p) = va_arg (ArgList, long);
break;
case VT_R4:
V_R4 (p) = va_arg (ArgList, float);
break;
case VT_DATE:
case VT_R8:
V_R8 (p) = va_arg (ArgList, double);
break;
case VT_CY:
V_CY (p) = va_arg (ArgList, CY);
break;
case VT_BSTR:
V_BSTR (p) = SysAllocString (va_arg (ArgList,
OLECHAR*));
if (! p->bstrVal)
{
m_hResult = ResultFromScode (E_OUTOFMEMORY);
p->vt = VT_EMPTY;
goto Cleanup;
}
break;
case VT_DISPATCH:
V_DISPATCH (p) = va_arg (ArgList, LPDISPATCH);
break;
case VT_ERROR:
V_ERROR (p) = va_arg (ArgList, SCODE);
break;
case VT_BOOL:
V_BOOL (p) = va_arg (ArgList, BOOL) ? -1 : 0;
break;
case VT_VARIANT:
*p = va_arg (ArgList, VARIANTARG);
break;
case VT_UNKNOWN:
V_UNKNOWN (p) = va_arg (ArgList, LPUNKNOWN);
break;
case VT_I2 | VT_BYREF:
V_I2REF (p) = va_arg (ArgList, short*);
break;
case VT_I4 | VT_BYREF:
V_I4REF (p) = va_arg (ArgList, long*);
break;
case VT_R4 | VT_BYREF:
V_R4REF (p) = va_arg (ArgList, float*);
break;
case VT_R8 | VT_BYREF:
V_R8REF (p) = va_arg (ArgList, double*);
break;
case VT_DATE | VT_BYREF:
V_DATEREF (p) = va_arg (ArgList, DATE*);
break;
case VT_CY | VT_BYREF:
V_CYREF (p) = va_arg (ArgList, CY*);
break;
case VT_BSTR | VT_BYREF:
V_BSTRREF (p) = va_arg (ArgList, BSTR*);
break;
case VT_DISPATCH | VT_BYREF:
V_DISPATCHREF (p) = va_arg (ArgList, LPDISPATCH*);
break;
case VT_ERROR | VT_BYREF:
V_ERRORREF (p) = va_arg (ArgList, SCODE*);
break;
case VT_BOOL | VT_BYREF:
{
BOOL* pBool = va_arg (ArgList, BOOL*);
*pBool = 0;
V_BOOLREF (p) = (VARIANT_BOOL*) pBool;
}
break;
case VT_VARIANT | VT_BYREF:
V_VARIANTREF (p) = va_arg (ArgList, VARIANTARG*);
break;
case VT_UNKNOWN | VT_BYREF:
V_UNKNOWNREF (p) = va_arg (ArgList, LPUNKNOWN*);
break;
default:
{
m_hResult = ResultFromScode (E_INVALIDARG);
goto Cleanup;
}
break;
}
--p; // Get ready to fill next argument
}
}
DispatchParams.cArgs = ArgCount;
DispatchParams.rgvarg = ArgVector;
// Initialize return variant, in case caller forgot. Caller can pass
// NULL if return value is not expected.
VariantInit (&m_VariantResult);
// Make the call
m_hResult = m_pDispatch->Invoke (DispatchId, IID_NULL, LOCALE_USER_DEFAULT,
Flags, &DispatchParams, &m_VariantResult,
&m_ExceptionInfo, &m_nErrArg);
Cleanup:
// Cleanup any arguments that need cleanup
if (ArgCount)
{
VARIANTARG* p = ArgVector;
while (ArgCount--)
{
switch (p->vt)
{
case VT_BSTR:
VariantClear (p);
break;
}
++p;
}
CoTaskMemFree (ArgVector);
}
return FAILED (m_hResult) ? false : true;
}
#define CASE_SCODE(sc) \
case sc: \
lstrcpy((char*)ErrName, (char*)#sc); \
break;
void COleAutomationControl::ErrDiag ()
{
char ErrName[200];
SCODE sc = GetScode (m_hResult);
switch (sc)
{
// SCODE's defined in SCODE.H
CASE_SCODE (S_OK)
CASE_SCODE (S_FALSE)
CASE_SCODE (E_UNEXPECTED)
CASE_SCODE (E_OUTOFMEMORY)
CASE_SCODE (E_INVALIDARG)
CASE_SCODE (E_NOINTERFACE)
CASE_SCODE (E_POINTER)
CASE_SCODE (E_HANDLE)
CASE_SCODE (E_ABORT)
CASE_SCODE (E_FAIL)
CASE_SCODE (E_ACCESSDENIED)
// SCODE's defined in OLE2.H
CASE_SCODE (OLE_E_OLEVERB)
CASE_SCODE (OLE_E_ADVF)
CASE_SCODE (OLE_E_ENUM_NOMORE)
CASE_SCODE (OLE_E_ADVISENOTSUPPORTED)
CASE_SCODE (OLE_E_NOCONNECTION)
CASE_SCODE (OLE_E_NOTRUNNING)
CASE_SCODE (OLE_E_NOCACHE)
CASE_SCODE (OLE_E_BLANK)
CASE_SCODE (OLE_E_CLASSDIFF)
CASE_SCODE (OLE_E_CANT_GETMONIKER)
CASE_SCODE (OLE_E_CANT_BINDTOSOURCE)
CASE_SCODE (OLE_E_STATIC)
CASE_SCODE (OLE_E_PROMPTSAVECANCELLED)
CASE_SCODE (OLE_E_INVALIDRECT)
CASE_SCODE (OLE_E_WRONGCOMPOBJ)
CASE_SCODE (OLE_E_INVALIDHWND)
CASE_SCODE (OLE_E_NOT_INPLACEACTIVE)
CASE_SCODE (OLE_E_CANTCONVERT)
CASE_SCODE (OLE_E_NOSTORAGE)
CASE_SCODE (DV_E_FORMATETC)
CASE_SCODE (DV_E_DVTARGETDEVICE)
CASE_SCODE (DV_E_STGMEDIUM)
CASE_SCODE (DV_E_STATDATA)
CASE_SCODE (DV_E_LINDEX)
CASE_SCODE (DV_E_TYMED)
CASE_SCODE (DV_E_CLIPFORMAT)
CASE_SCODE (DV_E_DVASPECT)
CASE_SCODE (DV_E_DVTARGETDEVICE_SIZE)
CASE_SCODE (DV_E_NOIVIEWOBJECT)
CASE_SCODE (OLE_S_USEREG)
CASE_SCODE (OLE_S_STATIC)
CASE_SCODE (OLE_S_MAC_CLIPFORMAT)
CASE_SCODE (CONVERT10_E_OLESTREAM_GET)
CASE_SCODE (CONVERT10_E_OLESTREAM_PUT)
CASE_SCODE (CONVERT10_E_OLESTREAM_FMT)
CASE_SCODE (CONVERT10_E_OLESTREAM_BITMAP_TO_DIB)
CASE_SCODE (CONVERT10_E_STG_FMT)
CASE_SCODE (CONVERT10_E_STG_NO_STD_STREAM)
CASE_SCODE (CONVERT10_E_STG_DIB_TO_BITMAP)
CASE_SCODE (CONVERT10_S_NO_PRESENTATION)
CASE_SCODE (CLIPBRD_E_CANT_OPEN)
CASE_SCODE (CLIPBRD_E_CANT_EMPTY)
CASE_SCODE (CLIPBRD_E_CANT_SET)
CASE_SCODE (CLIPBRD_E_BAD_DATA)
CASE_SCODE (CLIPBRD_E_CANT_CLOSE)
CASE_SCODE (DRAGDROP_E_NOTREGISTERED)
CASE_SCODE (DRAGDROP_E_ALREADYREGISTERED)
CASE_SCODE (DRAGDROP_E_INVALIDHWND)
CASE_SCODE (DRAGDROP_S_DROP)
CASE_SCODE (DRAGDROP_S_CANCEL)
CASE_SCODE (DRAGDROP_S_USEDEFAULTCURSORS)
CASE_SCODE (OLEOBJ_E_NOVERBS)
CASE_SCODE (OLEOBJ_E_INVALIDVERB)
CASE_SCODE (OLEOBJ_S_INVALIDVERB)
CASE_SCODE (OLEOBJ_S_CANNOT_DOVERB_NOW)
CASE_SCODE (OLEOBJ_S_INVALIDHWND)
CASE_SCODE (INPLACE_E_NOTUNDOABLE)
CASE_SCODE (INPLACE_E_NOTOOLSPACE)
CASE_SCODE (INPLACE_S_TRUNCATED)
// SCODE's defined in COMPOBJ.H
CASE_SCODE (CO_E_NOTINITIALIZED)
CASE_SCODE (CO_E_ALREADYINITIALIZED)
CASE_SCODE (CO_E_CANTDETERMINECLASS)
CASE_SCODE (CO_E_CLASSSTRING)
CASE_SCODE (CO_E_IIDSTRING)
CASE_SCODE (CO_E_APPNOTFOUND)
CASE_SCODE (CO_E_APPSINGLEUSE)
CASE_SCODE (CO_E_ERRORINAPP)
CASE_SCODE (CO_E_DLLNOTFOUND)
CASE_SCODE (CO_E_ERRORINDLL)
CASE_SCODE (CO_E_WRONGOSFORAPP)
CASE_SCODE (CO_E_OBJNOTREG)
CASE_SCODE (CO_E_OBJISREG)
CASE_SCODE (CO_E_OBJNOTCONNECTED)
CASE_SCODE (CO_E_APPDIDNTREG)
CASE_SCODE (CLASS_E_NOAGGREGATION)
CASE_SCODE (CLASS_E_CLASSNOTAVAILABLE)
CASE_SCODE (REGDB_E_READREGDB)
CASE_SCODE (REGDB_E_WRITEREGDB)
CASE_SCODE (REGDB_E_KEYMISSING)
CASE_SCODE (REGDB_E_INVALIDVALUE)
CASE_SCODE (REGDB_E_CLASSNOTREG)
CASE_SCODE (REGDB_E_IIDNOTREG)
CASE_SCODE (RPC_E_CALL_REJECTED)
CASE_SCODE (RPC_E_CALL_CANCELED)
CASE_SCODE (RPC_E_CANTPOST_INSENDCALL)
CASE_SCODE (RPC_E_CANTCALLOUT_INASYNCCALL)
CASE_SCODE (RPC_E_CANTCALLOUT_INEXTERNALCALL)
CASE_SCODE (RPC_E_CONNECTION_TERMINATED)
CASE_SCODE (RPC_E_SERVER_DIED)
CASE_SCODE (RPC_E_CLIENT_DIED)
CASE_SCODE (RPC_E_INVALID_DATAPACKET)
CASE_SCODE (RPC_E_CANTTRANSMIT_CALL)
CASE_SCODE (RPC_E_CLIENT_CANTMARSHAL_DATA)
CASE_SCODE (RPC_E_CLIENT_CANTUNMARSHAL_DATA)
CASE_SCODE (RPC_E_SERVER_CANTMARSHAL_DATA)
CASE_SCODE (RPC_E_SERVER_CANTUNMARSHAL_DATA)
CASE_SCODE (RPC_E_INVALID_DATA)
CASE_SCODE (RPC_E_INVALID_PARAMETER)
CASE_SCODE (RPC_E_CANTCALLOUT_AGAIN)
CASE_SCODE (RPC_E_UNEXPECTED)
// SCODE's defined in DVOBJ.H
CASE_SCODE (DATA_S_SAMEFORMATETC)
CASE_SCODE (VIEW_E_DRAW)
CASE_SCODE (VIEW_S_ALREADY_FROZEN)
CASE_SCODE (CACHE_E_NOCACHE_UPDATED)
CASE_SCODE (CACHE_S_FORMATETC_NOTSUPPORTED)
CASE_SCODE (CACHE_S_SAMECACHE)
CASE_SCODE (CACHE_S_SOMECACHES_NOTUPDATED)
// SCODE's defined in STORAGE.H
CASE_SCODE (STG_E_INVALIDFUNCTION)
CASE_SCODE (STG_E_FILENOTFOUND)
CASE_SCODE (STG_E_PATHNOTFOUND)
CASE_SCODE (STG_E_TOOMANYOPENFILES)
CASE_SCODE (STG_E_ACCESSDENIED)
CASE_SCODE (STG_E_INVALIDHANDLE)
CASE_SCODE (STG_E_INSUFFICIENTMEMORY)
CASE_SCODE (STG_E_INVALIDPOINTER)
CASE_SCODE (STG_E_NOMOREFILES)
CASE_SCODE (STG_E_DISKISWRITEPROTECTED)
CASE_SCODE (STG_E_SEEKERROR)
CASE_SCODE (STG_E_WRITEFAULT)
CASE_SCODE (STG_E_READFAULT)
CASE_SCODE (STG_E_SHAREVIOLATION)
CASE_SCODE (STG_E_LOCKVIOLATION)
CASE_SCODE (STG_E_FILEALREADYEXISTS)
CASE_SCODE (STG_E_INVALIDPARAMETER)
CASE_SCODE (STG_E_MEDIUMFULL)
CASE_SCODE (STG_E_ABNORMALAPIEXIT)
CASE_SCODE (STG_E_INVALIDHEADER)
CASE_SCODE (STG_E_INVALIDNAME)
CASE_SCODE (STG_E_UNKNOWN)
CASE_SCODE (STG_E_UNIMPLEMENTEDFUNCTION)
CASE_SCODE (STG_E_INVALIDFLAG)
CASE_SCODE (STG_E_INUSE)
CASE_SCODE (STG_E_NOTCURRENT)
CASE_SCODE (STG_E_REVERTED)
CASE_SCODE (STG_E_CANTSAVE)
CASE_SCODE (STG_E_OLDFORMAT)
CASE_SCODE (STG_E_OLDDLL)
CASE_SCODE (STG_E_SHAREREQUIRED)
CASE_SCODE (STG_E_NOTFILEBASEDSTORAGE)
CASE_SCODE (STG_E_EXTANTMARSHALLINGS)
CASE_SCODE (STG_S_CONVERTED)
// SCODE's defined in STORAGE.H
CASE_SCODE (MK_E_CONNECTMANUALLY)
CASE_SCODE (MK_E_EXCEEDEDDEADLINE)
CASE_SCODE (MK_E_NEEDGENERIC)
CASE_SCODE (MK_E_UNAVAILABLE)
CASE_SCODE (MK_E_SYNTAX)
CASE_SCODE (MK_E_NOOBJECT)
CASE_SCODE (MK_E_INVALIDEXTENSION)
CASE_SCODE (MK_E_INTERMEDIATEINTERFACENOTSUPPORTED)
CASE_SCODE (MK_E_NOTBINDABLE)
CASE_SCODE (MK_E_NOTBOUND)
CASE_SCODE (MK_E_CANTOPENFILE)
CASE_SCODE (MK_E_MUSTBOTHERUSER)
CASE_SCODE (MK_E_NOINVERSE)
CASE_SCODE (MK_E_NOSTORAGE)
CASE_SCODE (MK_E_NOPREFIX)
CASE_SCODE (MK_S_REDUCED_TO_SELF)
CASE_SCODE (MK_S_ME)
CASE_SCODE (MK_S_HIM)
CASE_SCODE (MK_S_US)
CASE_SCODE (MK_S_MONIKERALREADYREGISTERED)
// SCODE's defined in DISPATCH.H
CASE_SCODE (DISP_E_UNKNOWNINTERFACE)
CASE_SCODE (DISP_E_MEMBERNOTFOUND)
CASE_SCODE (DISP_E_PARAMNOTFOUND)
CASE_SCODE (DISP_E_TYPEMISMATCH)
CASE_SCODE (DISP_E_UNKNOWNNAME)
CASE_SCODE (DISP_E_NONAMEDARGS)
CASE_SCODE (DISP_E_BADVARTYPE)
CASE_SCODE (DISP_E_EXCEPTION)
CASE_SCODE (DISP_E_OVERFLOW)
CASE_SCODE (DISP_E_BADINDEX)
CASE_SCODE (DISP_E_UNKNOWNLCID)
CASE_SCODE (DISP_E_ARRAYISLOCKED)
CASE_SCODE (DISP_E_BADPARAMCOUNT)
CASE_SCODE (DISP_E_PARAMNOTOPTIONAL)
CASE_SCODE (DISP_E_BADCALLEE)
CASE_SCODE (DISP_E_NOTACOLLECTION)
CASE_SCODE (TYPE_E_BUFFERTOOSMALL)
CASE_SCODE (TYPE_E_INVDATAREAD)
CASE_SCODE (TYPE_E_UNSUPFORMAT)
CASE_SCODE (TYPE_E_REGISTRYACCESS)
CASE_SCODE (TYPE_E_LIBNOTREGISTERED)
CASE_SCODE (TYPE_E_UNDEFINEDTYPE)
CASE_SCODE (TYPE_E_QUALIFIEDNAMEDISALLOWED)
CASE_SCODE (TYPE_E_INVALIDSTATE)
CASE_SCODE (TYPE_E_WRONGTYPEKIND)
CASE_SCODE (TYPE_E_ELEMENTNOTFOUND)
CASE_SCODE (TYPE_E_AMBIGUOUSNAME)
CASE_SCODE (TYPE_E_NAMECONFLICT)
CASE_SCODE (TYPE_E_UNKNOWNLCID)
CASE_SCODE (TYPE_E_DLLFUNCTIONNOTFOUND)
CASE_SCODE (TYPE_E_BADMODULEKIND)
CASE_SCODE (TYPE_E_SIZETOOBIG)
CASE_SCODE (TYPE_E_DUPLICATEID)
CASE_SCODE (TYPE_E_TYPEMISMATCH)
CASE_SCODE (TYPE_E_OUTOFBOUNDS)
CASE_SCODE (TYPE_E_IOERROR)
CASE_SCODE (TYPE_E_CANTCREATETMPFILE)
CASE_SCODE (TYPE_E_CANTLOADLIBRARY)
CASE_SCODE (TYPE_E_INCONSISTENTPROPFUNCS)
CASE_SCODE (TYPE_E_CIRCULARTYPE)
default:
lstrcpy (ErrName, "UNKNOWN SCODE");
}
char Buf[256];
sprintf (Buf, "An OLE error occurred:\r\nCode = %s\r\nResult = %lx.",
(char*) ErrName, m_hResult);
MessageBox (NULL, Buf, "OLE Error", MB_OK);
}
static bool CountArgsInFormat (LPCTSTR Format, UINT* pArgCount)
{
*pArgCount = 0;
if (! Format)
return true;
while (*Format)
{
if (*Format == '&')
Format++;
switch (*Format)
{
case 'b':
case 'i':
case 'I':
case 'r':
case 'R':
case 'c':
case 's':
case 'e':
case 'd':
case 'v':
case 'D':
case 'U':
++ (*pArgCount);
Format++;
break;
case '\0':
default:
return false;
}
}
return true;
}
static LPCTSTR GetNextVarType (LPCTSTR Format, VARTYPE* pVarType)
{
*pVarType = 0;
if (*Format == '&')
{
*pVarType = VT_BYREF;
Format++;
if (!*Format)
return NULL;
}
switch (*Format)
{
case 'b':
*pVarType |= VT_BOOL;
break;
case 'i':
*pVarType |= VT_I2;
break;
case 'I':
*pVarType |= VT_I4;
break;
case 'r':
*pVarType |= VT_R4;
break;
case 'R':
*pVarType |= VT_R8;
break;
case 'c':
*pVarType |= VT_CY;
break;
case 's':
*pVarType |= VT_BSTR;
break;
case 'e':
*pVarType |= VT_ERROR;
break;
case 'd':
*pVarType |= VT_DATE;
break;
case 'v':
*pVarType |= VT_VARIANT;
break;
case 'U':
*pVarType |= VT_UNKNOWN;
break;
case 'D':
*pVarType |= VT_DISPATCH;
break;
case '\0':
return NULL; // End of Format string
default:
return NULL;
}
return ++Format;
}
#ifndef UNICODE
char* ConvertToAnsi (OLECHAR* sUnicode)
{
static char BufAscii[MAX_OLE_STR];
return ConvertToAnsiBuf (sUnicode, BufAscii);
}
char* ConvertToAnsiBuf (OLECHAR* sUnicode, char* BufAscii)
{
WideCharToMultiByte (CP_ACP, 0, sUnicode, -1, BufAscii, MAX_OLE_STR, NULL, NULL);
return BufAscii;
}
OLECHAR* ConvertToUnicode (char* sAscii)
{
static OLECHAR BufUnicode[MAX_OLE_STR];
return ConvertToUnicodeBuf (sAscii, BufUnicode);
}
OLECHAR* ConvertToUnicodeBuf (char* sAscii, OLECHAR* BufUnicode)
{
MultiByteToWideChar (CP_ACP, 0, sAscii, -1, BufUnicode, MAX_OLE_STR);
return BufUnicode;
}
#endif

View File

@ -1,73 +0,0 @@
#ifndef __OLEAUT_H__
#define __OLEAUT_H__
class COleAutomationControl : public CObject
{
public:
COleAutomationControl ();
~COleAutomationControl ();
bool CreateObject (char* ProgId);
DISPID GetDispatchId (char* Name);
bool GetProperty (char* Name);
bool GetProperty (DISPID DispatchId);
bool PutProperty (char* Name, LPCTSTR Format, ...);
bool PutProperty (DISPID DispatchId, LPCTSTR Format, ...);
bool Method (char* Name, LPCTSTR Format = NULL, ...);
bool Method (DISPID DispatchId, LPCTSTR Format = NULL, ...);
void DeleteObject ();
void ErrDiag ();
bool IsCreated ()
{
return m_pDispatch ? true : false;
}
bool IsAlive ();
HRESULT GetResult ()
{
return m_hResult;
}
UINT GetErrArgNr ()
{
return m_nErrArg;
}
EXCEPINFO* GetExceptionInfo ()
{
return &m_ExceptionInfo;
}
LPVARIANT GetResultVariant ()
{
return &m_VariantResult;
}
protected:
bool Invoke (WORD Flags, char* Name, LPCTSTR Format, va_list ArgList);
bool Invoke (WORD Flags, DISPID DispatchId, LPCTSTR Format, va_list ArgList);
protected:
IDispatch* m_pDispatch;
HRESULT m_hResult;
UINT m_nErrArg;
EXCEPINFO m_ExceptionInfo;
VARIANTARG m_VariantResult;
};
#ifdef UNICODE
#define FROM_OLE_STRING(str) str
#define FROM_OLE_STRING_BUF(str,buf) str
#define TO_OLE_STR(str) str
#define TO_OLE_STR_BUF(str,buf) str
#define MAX_OLE_STR 1
#else
#define FROM_OLE_STR(str) ConvertToAnsi(str)
#define FROM_OLE_STR_BUF(str,buf) ConvertToAnsiBuf(str,buf)
char* ConvertToAnsi (OLECHAR* sUnicode);
char* ConvertToAnsiBuf (OLECHAR* sUnicode, char* Buf);
#define TO_OLE_STR(str) ConvertToUnicode(str)
#define TO_OLE_STR_BUF(str,buf) ConvertToUnicodeBuf(str,buf)
OLECHAR* ConvertToUnicode (char* sAscii);
OLECHAR* ConvertToUnicodeBuf (char* sAscii, OLECHAR* Buf);
// Maximum length of string that can be converted between Ansi & Unicode
#define MAX_OLE_STR 500
#endif
#endif // __OLEAUT_H__

View File

@ -1,326 +0,0 @@
===============================
Visual Studio - Vim Integration
===============================
Copyright (C) 1997 Heiko Erhardt
VisVim is a Visual Studio Add-In that allows Vim to be integrated
as the default text editor. It will be used instead of the Visual
Studio built-in editor when you double-click on a file or press F4
after compiling (it will go to the proper line in the Vim buffer).
The file can be loaded exclusively by Vim or additionally to the
builtin Visual Studio editor (this option can be set in the VisVim
configuration dialog inside Visual Studio).
Vim does not replace the Visual Studio editor, it still runs in its
own window.
VisVim is based upon VisEmacs by Christopher Payne
(Copyright (C) Christopher Payne 1997).
Author: Heiko Erhardt <heiko.erhardt@gmx.net>
Based upon: VisEmacs by Christopher Payne <payneca@sagian.com>
Version: 1.0
Created: 23 Oct 1997
Date: 23 Oct 1997
VisVim was originally GNU GPL licensed, as stated below. On March 21 2012
Heiko Erhardt declared this work to be relicensed under the Vim license, as
stated in ../../runtime/doc/uganda.txt (or ":help uganda" in Vim).
VisVim is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
VisVim is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Requirements
------------
VisVim works with the *OLE-enabled* version of Vim version 5.0 and higher
only!!! You must download the extra archive containing the OLE-enabled
executable from your Vim download site. When building your own Vim
executable, use the if_ole_vc.mak makefile (Vim 5.1 and higher).
VisVim needs DevStudio 5.0 or higher. It does not work with DevStudio 4.2.
Installation
------------
1) Close running instances of DevStudio.
2) Copy VisVim.dll into a convenient directory like \vim,
\vim\lib, or \vim\addin
3) Register the DLL using regsvr32.exe ... (Skip this on Windows 95/98)
Example:
> cd \vim\addin
> regsvr32 VisVim.dll
On NT, you should do this from an administrator account.
Before installing a new version of VisVim you should unregister
the old one using
> regsvr32 -unregister VisVim.dll
The batch files register.bat and unregister.bat can do that for you.
3a) If you didn't do this yet: Register the OLE gvim:
> gvim -register
4) Start Visual Studio and go to:
Tools
Customize...
Add-Ins and Macro Files
5) Click on Browse, and point Visual Studio to your VisVim.dll file.
6) Click the checkbox to indicate that you want to use the Add-In, and
Close the Customize dialog box.
7) You should notice the VisVim Toolbar with the Vim Icon.
Click the first item of the toolbar to get to the options dialog.
Compiling VisVim
----------------
Two Options:
1) Load the VisVim.mak file as a Workspace in Visual Studio and compile
2) Use the MSVC command line compiler:
vcvars32
nmake -f VisVim.mak
Using VisVim
------------
The VisVim DLL exposes several functions to the user. These functions are
accessible using the toolbar or by assigning hotkeys to them (see below).
The following functions are visible on the toolbar (from left to right):
1. VisVim settings dialog
The settings you adjust here will be saved in the registry and
will be reloaded on program startup.
2. Enable Vim
Enables Vim as Visual Studio editor. Control will be switched to Vim when:
- Clicking a file in the file view
- Clicking a compiler error message line
- Using the 'File-Open' Dialog
- Showing the current source line when encountering a debugger breakpoint.
- Using File-New
3. Disable Vim
The internal Visual Studio editor will be used to edit files.
4. Toggle enable state
Toggles the enable state of VisVim. Use this function if you want to have
one button only to activate/deactivate Vim.
5. Load current file in Vim
Loads the file shown in the internal editor into Vim. Use this function if
you want the internal editor to stay active and just edit one file in Vim.
This command works always whether Vim is enabled as default editor or not.
You cannot use DevStudio's debugger commands from inside Vim, so you should
disable Vim before running the debugger.
You can customize the Vim toolbar itself or add the Vim buttons to other
toolbars.
To have fast access to the VisVim options dialog I suggest to create keyboard
shortcuts:
1) Choose
Tools
Customize...
Keyboard
2) Choose Category:AddIns and Commands:VisVim.
3) Choose 'Main' as editor, enter each hotkey and press the Assign button.
I suggest:
VisVimDialogCmd Alt+Shift+V
VisVimEnableCmd Alt+Shift+E
VisVimDisableCmd Alt+Shift+D
VisVimToggleCmd Alt+Shift+T
VisVimLoadCmd Alt+Shift+G
4) Close the dialog
Now a typical debugging example:
Using "Alt+Shift+d" you turn off Vim before starting the debugger.
After hitting the breakpoint you single step through your application
using the internal source code editor and examine variables.
When you stumble across the line with the null pointer
assignment, just press "Alt+Shift+g", and correct the error in Vim.
Save the file, press Alt+Tab to return to DevStudio and press F7 to compile.
That's it.
Troubleshooting
---------------
1. When opening a file in DevStudio the file is opened in the DevStudio
editor and immediately vanishes. No Vim shows up.
Cause: Probably you don't have the OLE-enabled Vim or you didn't
register it.
Explanation: VisVim is notified by DevStudio if an 'open document' event
occurs. It then closes the document in the internal editor
and tries to start Vim. If Vim isn't properly OLE-registered,
this won't work.
Workaround: Download and install the OLE-enable version of Vim and
execute "gvim -register".
2. Sometimes when clicking on a file, the file won't be opened by Vim but
instead the Visual Studio editor comes up.
Cause: The file was already loaded by the DevStudio editor.
Explanation: VisVim works by hooks exposed by Visual Studio.
Most of the functionality works from the OpenDocument hook.
If a document is already loaded in the Visual Studio editor,
no 'open document' event will be generated when clicking the
file in the file list.
Workaround: Close the document in Visual Studio first.
3. I can't get VisVim to work. Either the Vim toolbar does not appear at all
or weird crashes happen.
Cause: The Visual Studio installation is messed up.
Explanation: I can't give you one. Ask M$.
Workaround: Reinstall DevStudio (I know this is brute, but in some cases
it helped). There was one case where the service pack 1 had
to be installed, too.
4. If an instance of Vim is already running, VisVim will use that instance
and not start a new one.
Cause: This is proper OLE behaviour
Explanation: Some call it a bug, some a feature. That's just the way OLE
works.
5. When being in insert mode in Vim and selecting a file in Visual Studio,
the Vim command :e ... is inserted as text instead of being executed.
Cause: You probably know...
Explanation: The Vim OLE automation interface interprets the VisVim
commands as if they were typed in by the user.
So if you're in insert mode Vim considers it to be text.
I decided against sending an ESC before the command because
it may cause a beep or at least a screen flash when noeb is
set.
Workaround: Get used to press ESC before switching to DevStudio.
6. I'm tired of VisVim but I can't get rid of it. I can't delete it in
Tools-Customize-Add-Ins.
Cause: You can't delete an item you once added to the add-ins
list box.
Explanation: M$ just didn't put a 'delete' button in the dialog box.
Unfortunately there is no DEL key accelerator as well...
Workaround: You can't kill it, but you can knock it out:
1. Uncheck the check box in front of 'Vim Developer Studio
Add-in'.
2. Close Visual Studio.
3. Delete VisVim.dll or move it somewhere it can't be found.
4. Run Visual Studio.
5. Tools -> Customize ->Add-ins and Macro-Files.
6. A message appears:
".../VisVim.dll" "This add-in no longer exists. It will
no longer be displayed."
That's it!
Change history
--------------
1.0a to 1.0
-----------
- All settings in the VisVim dialog are remembered between DevStudio sessions
by keeping them in the registry (HKEY_CURRENT_USER\Software\Vim\VisVim).
- Added an option to do a :cd before opening the file (having a file opened
by clicking it but finding out to be still in C:\Windows\system when trying to
open another file by ":e" can be annoying). Change directory can be
done to the source file's directory or its parent directory.
- Added some explanations to the error message for the CO_E_CLASSSTRING error
("Use OLE Vim and make sure to register...").
1.0 to 1.1a
-----------
- The VisVim toolbar button now shows the new Vim icon instead of the old one.
- Made some changes to the documentation, added the troubleshooting chapter
and ToDo list.
- File-New-* now invokes Vim instead of the builtin editor if enabled.
1.1 to 1.1b
-----------
- Extended the VisVim toolbar to have multiple buttons instead of one.
- Moved the enable/disable commands from the settings dialog to the toolbar.
- Added the toggle enable/disable command
- Added the 'load current file' command.
1.1b to 1.2
-----------
No new features, just some fine tuning:
- Changed the GUID of the VisVim OLE interface to avoid conflicts with a
version of VisEmacs or VisVile on the same computer (Guy Gascoigne)
- Fixed a bug caused by a bug in the Developer Studio add-in code generator
(Clark Morgan)
- Fixed a memory leak (Clark Morgan)
- Added an option in the VisVim dialog to prepend ESC before the first command
that is sent to Vim. This will avoid inserting the command as text when Vim
is still in insert mode.
- An :update command is sent to Vim before any other command to update the
current file if it is modified, or else the following :cd or :e command will fail.
1.2 to 1.3a
-----------
- Fixed a bug caused by a missing EnableModeless() function call in VimLoad().
This seems to reduce VisVim crashing DevStudio on some systems (it
occasionally still seems to happen, but it's more stable now).
(Vince Negri)
- Added support for the new CTRL-\ CTRL-N command of Vim 5.4a.
This prevents Vim from beeping when a VisVim command is executed and Vim is
not in insert mode.
ToDo List
---------
P1 is highest priority, P10 lowest
P9 Switching to DevStudio using ALT-TAB may get annoying. Would be nice to
have the option to map ActivateApplication("Visual Studio") in Vim.
Vim DLLs would solve that problem.
P8 Execute :tag command in Vim for word under cursor in DevStudio
P7 Controlling the Visual Studio Debugger from inside Vim
See message above. Also a 'Debug' highlight group and a
command to highlight a certain line would be necessary.
P6 Provide an option to open the current file in VisVim in
Visual Studio editor
Same as above message. A kind of two way OLE automation would have to be
established between VisVim and Vim. Also a 'Debug' highlight group and a
command to highlight a certain line would be necessary.
Known Problems
--------------
- Occasional memory corruptions in DevStudio may appear on some systems.
Reinstalling DevStudio helped in some cases.
The cause of these crashes is unclear; there is no way to debug this.
Recompiling VisVim with DevStudio SP3 didn't help.
I assume it's a problem deep inside the DevStudio add-in OLE interfaces.
This will hopefully be fixed with DevStudio 6.
Have fun!
Heiko Erhardt
heiko.erhardt@gmx.net

View File

@ -1,56 +0,0 @@
#include "stdafx.h"
// Returns key for HKEY_CURRENT_USER\"Software"\Company\AppName
// creating it if it doesn't exist
// responsibility of the caller to call RegCloseKey() on the returned HKEY
//
HKEY GetAppKey (char* AppName)
{
HKEY hAppKey = NULL;
HKEY hSoftKey = NULL;
if (RegOpenKeyEx (HKEY_CURRENT_USER, "Software", 0, KEY_WRITE | KEY_READ,
&hSoftKey) == ERROR_SUCCESS)
{
DWORD Dummy;
RegCreateKeyEx (hSoftKey, AppName, 0, REG_NONE,
REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_READ, NULL,
&hAppKey, &Dummy);
}
if (hSoftKey)
RegCloseKey (hSoftKey);
return hAppKey;
}
// Returns key for
// HKEY_CURRENT_USER\"Software"\RegistryKey\AppName\Section
// creating it if it doesn't exist.
// responsibility of the caller to call RegCloseKey () on the returned HKEY
//
HKEY GetSectionKey (HKEY hAppKey, LPCTSTR Section)
{
HKEY hSectionKey = NULL;
DWORD Dummy;
RegCreateKeyEx (hAppKey, Section, 0, REG_NONE,
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
&hSectionKey, &Dummy);
return hSectionKey;
}
int GetRegistryInt (HKEY hSectionKey, LPCTSTR Entry, int Default)
{
DWORD Value;
DWORD Type;
DWORD Count = sizeof (DWORD);
if (RegQueryValueEx (hSectionKey, (LPTSTR) Entry, NULL, &Type,
(LPBYTE) &Value, &Count) == ERROR_SUCCESS)
return Value;
return Default;
}
bool WriteRegistryInt (HKEY hSectionKey, char* Entry, int nValue)
{
return RegSetValueEx (hSectionKey, Entry, NULL, REG_DWORD,
(LPBYTE) &nValue, sizeof (nValue)) == ERROR_SUCCESS;
}

View File

@ -1 +0,0 @@
regsvr32.exe visvim.dll

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 758 B

View File

@ -1,30 +0,0 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by VisVim.rc
//
#define IDS_VISVIM_LONGNAME 1
#define IDS_VISVIM_DESCRIPTION 2
#define IDS_CMD_DIALOG 3
#define IDS_CMD_ENABLE 4
#define IDS_CMD_DISABLE 5
#define IDS_CMD_TOGGLE 6
#define IDS_CMD_LOAD 7
#define IDR_TOOLBAR_MEDIUM 128
#define IDR_TOOLBAR_LARGE 129
#define IDD_ADDINMAIN 130
#define IDC_DEVSTUDIO_EDITOR 1000
#define IDC_CD_SOURCE_PATH 1001
#define IDC_CD_SOURCE_PARENT 1002
#define IDC_CD_NONE 1003
#define IDC_NEW_TABS 1004
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 131
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1004
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -1,6 +0,0 @@
// Stdafx.cpp : source file that includes just the standard includes
// VisEmacs.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
#include "atlimpl.cpp"

View File

@ -1,73 +0,0 @@
// Stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__AC72670E_2977_11D1_B2F3_006008040780__INCLUDED_)
#define AFX_STDAFX_H__AC72670E_2977_11D1_B2F3_006008040780__INCLUDED_
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxdisp.h>
#include <atlbase.h>
//You may derive a class from CComModule and use it if you want to override
//something, but do not change the name of _Module
extern CComModule _Module;
#include <atlcom.h>
// Developer Studio Object Model
#include <ObjModel\addauto.h>
#include <ObjModel\appdefs.h>
#include <ObjModel\appauto.h>
#include <ObjModel\blddefs.h>
#include <ObjModel\bldauto.h>
#include <ObjModel\textdefs.h>
#include <ObjModel\textauto.h>
#include <ObjModel\dbgdefs.h>
#include <ObjModel\dbgauto.h>
/////////////////////////////////////////////////////////////////////////////
// Debugging support
// Use VERIFY_OK around all calls to the Developer Studio objects which
// you expect to return S_OK.
// In DEBUG builds of your add-in, VERIFY_OK displays an ASSERT dialog box
// if the expression returns an HRESULT other than S_OK. If the HRESULT
// is a success code, the ASSERT box will display that HRESULT. If it
// is a failure code, the ASSERT box will display that HRESULT plus the
// error description string provided by the object which raised the error.
// In RETAIL builds of your add-in, VERIFY_OK just evaluates the expression
// and ignores the returned HRESULT.
#ifdef _DEBUG
void GetLastErrorDescription (CComBSTR & bstr); // Defined in VisVim.cpp
#define VERIFY_OK(f) \
{ \
HRESULT hr = (f); \
if (hr != S_OK) \
{ \
if (FAILED(hr)) \
{ \
CComBSTR bstr; \
GetLastErrorDescription(bstr); \
_RPTF2(_CRT_ASSERT, "Object call returned %lx\n\n%S", hr, (BSTR) bstr); \
} \
else \
_RPTF1(_CRT_ASSERT, "Object call returned %lx", hr); \
} \
}
#else //_DEBUG
#define VERIFY_OK(f) (f);
#endif //_DEBUG
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__AC72670E_2977_11D1_B2F3_006008040780__INCLUDED)

View File

@ -1 +0,0 @@
regsvr32.exe -unregister visvim.dll

View File

@ -1,152 +0,0 @@
// VisVim.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include <initguid.h>
#include "VisVim.h"
#include "DSAddIn.h"
#include "Commands.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CComModule _Module;
BEGIN_OBJECT_MAP (ObjectMap)
OBJECT_ENTRY (CLSID_DSAddIn, CDSAddIn)
END_OBJECT_MAP ()
class CVisVimApp : public CWinApp
{
public:
CVisVimApp ();
//{{AFX_VIRTUAL(CVisVimApp)
public:
virtual BOOL InitInstance ();
virtual int ExitInstance ();
//}}AFX_VIRTUAL
//{{AFX_MSG(CVisVimApp)
//}}AFX_MSG
DECLARE_MESSAGE_MAP ()
};
BEGIN_MESSAGE_MAP (CVisVimApp, CWinApp)
//{{AFX_MSG_MAP(CVisVimApp)
//}}AFX_MSG_MAP
END_MESSAGE_MAP ()
// The one and only CVisVimApp object
CVisVimApp theApp;
CVisVimApp::CVisVimApp ()
{
}
BOOL CVisVimApp::InitInstance ()
{
_Module.Init (ObjectMap, m_hInstance);
return CWinApp::InitInstance ();
}
int CVisVimApp::ExitInstance ()
{
_Module.Term ();
return CWinApp::ExitInstance ();
}
// Special entry points required for inproc servers
//
STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID * ppv)
{
AFX_MANAGE_STATE (AfxGetStaticModuleState ());
return _Module.GetClassObject (rclsid, riid, ppv);
}
STDAPI DllCanUnloadNow (void)
{
AFX_MANAGE_STATE (AfxGetStaticModuleState ());
return (AfxDllCanUnloadNow () == S_OK && _Module.GetLockCount () == 0)
? S_OK : S_FALSE;
}
// By exporting DllRegisterServer, you can use regsvr32.exe
//
STDAPI DllRegisterServer (void)
{
AFX_MANAGE_STATE (AfxGetStaticModuleState ());
HRESULT hRes;
// Registers object, typelib and all interfaces in typelib
hRes = _Module.RegisterServer (TRUE);
if (FAILED (hRes))
// Hack: When this fails we might be a normal user, while the
// admin already registered the module. Returning S_OK then
// makes it work. When the module was never registered it
// will soon fail in another way.
// old code: return hRes;
return S_OK;
_ATL_OBJMAP_ENTRY *pEntry = _Module.m_pObjMap;
CRegKey key;
LONG lRes = key.Open (HKEY_CLASSES_ROOT, _T ("CLSID"));
if (lRes == ERROR_SUCCESS)
{
USES_CONVERSION;
LPOLESTR lpOleStr;
StringFromCLSID (*pEntry->pclsid, &lpOleStr);
LPTSTR lpsz = OLE2T (lpOleStr);
lRes = key.Open (key, lpsz);
if (lRes == ERROR_SUCCESS)
{
CString strDescription;
strDescription.LoadString (IDS_VISVIM_DESCRIPTION);
key.SetKeyValue (_T ("Description"), strDescription);
}
CoTaskMemFree (lpOleStr);
}
if (lRes != ERROR_SUCCESS)
hRes = HRESULT_FROM_WIN32 (lRes);
return hRes;
}
// DllUnregisterServer - Removes entries from the system registry
//
STDAPI DllUnregisterServer (void)
{
AFX_MANAGE_STATE (AfxGetStaticModuleState ());
HRESULT hRes = S_OK;
_Module.UnregisterServer ();
return hRes;
}
// Debugging support
// GetLastErrorDescription is used in the implementation of the VERIFY_OK
// macro, defined in stdafx.h.
#ifdef _DEBUG
void GetLastErrorDescription (CComBSTR & bstr)
{
CComPtr < IErrorInfo > pErrorInfo;
if (GetErrorInfo (0, &pErrorInfo) == S_OK)
pErrorInfo->GetDescription (&bstr);
}
#endif //_DEBUG

View File

@ -1,11 +0,0 @@
; VisVim.def : Declares the module parameters for the DLL.
LIBRARY "VISVIM"
DESCRIPTION 'VISVIM Windows Dynamic Link Library'
EXPORTS
; Explicit exports can go here
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE

Binary file not shown.

View File

@ -1,33 +0,0 @@
// VisVIM.h : main header file for the VisVim DLL
//
#if !defined(AFX_VISVIM_H__AC72670B_2977_11D1_B2F3_006008040780__INCLUDED_)
#define AFX_VISVIM_H__AC72670B_2977_11D1_B2F3_006008040780__INCLUDED_
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // Main symbols
#include <ObjModel\addguid.h>
#include <ObjModel\appguid.h>
#include <ObjModel\bldguid.h>
#include <ObjModel\textguid.h>
#include <ObjModel\dbgguid.h>
//
// Prototypes
//
HKEY GetAppKey (char* AppName);
HKEY GetSectionKey (HKEY hAppKey, LPCTSTR Section);
int GetRegistryInt (HKEY hSectionKey, LPCTSTR Entry, int Default);
bool WriteRegistryInt (HKEY hSectionKey, char* Entry, int nValue);
void ReportLastError (HRESULT Err);
void ReportInternalError (char* Fct);
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_VISVIM_H__AC72670B_2977_11D1_B2F3_006008040780__INCLUDED)

View File

@ -1,205 +0,0 @@
# Microsoft Developer Studio Generated NMAKE File, Format Version 4.00
# ** DO NOT EDIT **
#
# When Who What
# 1999-08-01 Anon Original VisVim.dsp
# 2001-08-08 W.Briscoe Back-ported to a condensed VC4 Makefile
# Reduced inter-dependency of Release and Debug builds.
#
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
!IF "$(CFG)" == ""
CFG=VisVim - Win32 Release
!MESSAGE No configuration specified. Defaulting to VisVim - Win32 Release.
!ENDIF
!IF "$(CFG)" != "VisVim - Win32 Release" && "$(CFG)" != "VisVim - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE on this makefile
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "VisVim.mak" CFG="VisVim - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "VisVim - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "VisVim - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF
!IF "$(OS)" == "Windows_NT"
NULL=
DEL_TREE = rmdir /s /q
!ELSE
NULL=nul
DEL_TREE = deltree /y
!ENDIF
# Begin Project
# PROP Target_Last_Scanned "VisVim - Win32 Release"
# PROP Use_MFC 2
CPP=cl.exe
RSC=rc.exe
LINK32=link.exe
!IF "$(CFG)" == "VisVim - Win32 Release"
# PROP Use_Debug_Libraries 0
# PROP Output_Dir ".\Release"
# PROP Intermediate_Dir ".\Release"
# PROP Target_Dir ""
OUTDIR=.\Release
INTDIR=.\Release
CPP_OBJS=.\Release/
# ADD CPP /MD /O2 /D "NDEBUG" /I.\Release
CPP_PROJ= /MD /O2 /D "NDEBUG" /I.\Release
# ADD RSC /d "NDEBUG
RSC_PROJ= /d "NDEBUG"
# ADD LINK32 /pdb:none
LINK32_FLAGS=/pdb:none
!ELSEIF "$(CFG)" == "VisVim - Win32 Debug"
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ".\Debug"
# PROP Intermediate_Dir ".\Debug"
# PROP Target_Dir ""
OUTDIR=.\Debug
INTDIR=.\Debug
CPP_OBJS=.\Debug/
# ADD CPP /MDd /Gm /Zi /Od /D "_DEBUG" /I.\Debug
CPP_PROJ= /MDd /Gm /Zi /Od /D "_DEBUG" /I.\Debug /Fd"$(INTDIR)/"
MTL_PROJ= /D "_DEBUG"
# ADD RSC /d "_DEBUG
RSC_PROJ= /d "_DEBUG"
# ADD LINK32 /debug /pdbtype:sept /pdb:".\Debug/VisVim.pdb"
LINK32_FLAGS=/debug /pdbtype:sept /pdb:"$(OUTDIR)/VisVim.pdb"
!ENDIF
# ADD CPP /nologo /W3 /GX /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_USRDLL" /c
CPP_PROJ=$(CPP_PROJ) /nologo /W3 /GX /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_USRDLL" /c /Fo"$(INTDIR)/"
# ADD RSC /l 0x409 /d "_AFXDLL"
RSC_PROJ=$(RSC_PROJ) /l 0x409 /d "_AFXDLL" /fo"$(INTDIR)/VisVim.res"
# ADD LINK32 /nologo /subsystem:windows /dll /machine:I386 /incremental:no
LINK32_FLAGS=$(LINK32_FLAGS) /nologo /subsystem:windows /dll /machine:I386\
/incremental:no /def:".\VisVim.def"\
/out:"$(OUTDIR)/VisVim.dll" /implib:"$(OUTDIR)/VisVim.lib"
ALL : "$(OUTDIR)\VisVim.dll"
CLEAN :
-@if exist "$(INTDIR)/$(NULL)" $(DEL_TREE) "$(INTDIR)"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
LINK32_OBJS= \
"$(INTDIR)/VisVim.res" \
"$(INTDIR)/VisVim.obj" \
"$(INTDIR)/StdAfx.obj" \
"$(INTDIR)/Reg.obj" \
"$(INTDIR)/DSAddIn.obj" \
"$(INTDIR)/OleAut.obj" \
"$(INTDIR)/Commands.obj"
"$(OUTDIR)\VisVim.dll" : "$(OUTDIR)" ".\VisVim.def" $(LINK32_OBJS)
$(LINK32) $(LINK32_FLAGS) $(LINK32_OBJS)
{.}.c{$(CPP_OBJS)}.obj:
$(CPP) $(CPP_PROJ) $<
{.}.cpp{$(CPP_OBJS)}.obj:
$(CPP) $(CPP_PROJ) $<
# Begin Target
# Name "VisVim - Win32 Release"
# Name "VisVim - Win32 Debug"
# Begin Source File
SOURCE=.\VisVim.cpp
"$(INTDIR)\VisVim.obj" : $(SOURCE) "$(INTDIR)"
# End Source File
# Begin Source File
SOURCE=.\VisVim.def
# End Source File
# Begin Source File
SOURCE=.\VisVim.odl
!IF "$(CFG)" == "VisVim - Win32 Release"
# PROP Ignore_Default_Tool 1
# Begin Custom Build
"$(INTDIR)\VisVim.tlb" : $(SOURCE) "$(INTDIR)"
midl /nologo /mktyplib203 /win32 /tlb VisVim.tlb /h VSVTypes.h .\VisVim.odl /out .\Release /D "NDEBUG"
# End Custom Build
!ELSEIF "$(CFG)" == "VisVim - Win32 Debug"
# PROP Ignore_Default_Tool 1
# Begin Custom Build
"$(INTDIR)\VisVim.tlb" : $(SOURCE) "$(INTDIR)"
midl /nologo /mktyplib203 /win32 /tlb VisVim.tlb /h VSVTypes.h .\VisVim.odl /out .\Debug /D "_DEBUG"
# End Custom Build
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\StdAfx.cpp
"$(INTDIR)\StdAfx.obj" : $(SOURCE) "$(INTDIR)"
# End Source File
# Begin Source File
SOURCE=.\VisVim.rc
"$(INTDIR)\VisVim.res" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\VisVim.tlb"
$(RSC) $(RSC_PROJ) /i "$(INTDIR)" $(SOURCE)
# End Source File
# Begin Source File
SOURCE=.\Reg.cpp
"$(INTDIR)\Reg.obj" : $(SOURCE) "$(INTDIR)"
# End Source File
# Begin Source File
SOURCE=.\DSAddIn.cpp
"$(INTDIR)\DSAddIn.obj" : $(SOURCE) "$(INTDIR)"
# End Source File
# Begin Source File
SOURCE=.\OleAut.cpp
"$(INTDIR)\OleAut.obj" : $(SOURCE) "$(INTDIR)"
# End Source File
# Begin Source File
SOURCE=.\Commands.cpp
"$(INTDIR)\Commands.obj" : $(SOURCE) "$(INTDIR)"
# End Source File
# End Target
# End Project

View File

@ -1,61 +0,0 @@
// VisVim.odl : type library source for VisVim.dll
// This file will be processed by the Make Type Library (mktyplib) tool to
// produce the type library (VisVim.tlb).
[ uuid(AC726707-2977-11D1-B2F3-006008040780), version(1.0),
helpstring ("VisVim Developer Studio Add-in") ]
library VisVim
{
importlib("stdole32.tlb");
importlib("devshl.dll");
importlib("ide\devdbg.pkg");
// Dual interface for CCommands
//
// All commands that your add-in adds to DevStudio
// must appear in this interface. You may use the
// ClassView to add methods to this interface, which
// will cause stub implementations of those methods to
// appear in your CCommands class.
[ uuid(AC726703-2977-11D1-B2F3-006008040780),
oleautomation,
dual
]
interface ICommands : IDispatch
{
// methods
[id(1)]
HRESULT VisVimDialog();
HRESULT VisVimEnable();
HRESULT VisVimDisable();
HRESULT VisVimToggle();
HRESULT VisVimLoad();
};
// Class information for CCommands
[ uuid(AC726704-2977-11D1-B2F3-006008040780) ]
coclass Commands
{
[default] interface ICommands;
};
[ hidden, uuid(AC726705-2977-11D1-B2F3-006008040780) ]
coclass ApplicationEvents
{
[default] interface IApplicationEvents;
}
[ hidden, uuid(AC726706-2977-11D1-B2F3-006008040780) ]
coclass DebuggerEvents
{
[default] interface IDebuggerEvents;
}
//{{AFX_APPEND_ODL}}
//}}AFX_APPEND_ODL}}
};

View File

@ -1,202 +0,0 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Englisch (USA) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
"#ifdef _WIN32\r\n"
"LANGUAGE 9, 1\r\n"
"#pragma code_page(1252)\r\n"
"#endif\r\n"
"#include ""afxres.rc"" // Standard components\r\n"
"#endif\r\n"
"1 TYPELIB ""VisVim.tlb""\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDR_TOOLBAR_MEDIUM BITMAP MOVEABLE PURE "res\\ToolbarM.bmp"
IDR_TOOLBAR_LARGE BITMAP MOVEABLE PURE "res\\ToolbarL.bmp"
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,1,0,1
PRODUCTVERSION 1,1,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "VisVim DLL\0"
VALUE "FileVersion", "1, 1, 0, 1\0"
VALUE "InternalName", "VisVim\0"
VALUE "LegalCopyright", "Copyright (C) 1998\0"
VALUE "OriginalFilename", "VisVim.DLL\0"
VALUE "ProductName", "VisVim Dynamic Link Library\0"
VALUE "ProductVersion", "1, 1, 0, 1\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ADDINMAIN DIALOG DISCARDABLE 0, 0, 178, 124
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Vim Add-In 1.4"
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "&Open file in DevStudio editor simultaneously",
IDC_DEVSTUDIO_EDITOR,"Button",BS_AUTOCHECKBOX | WS_GROUP |
WS_TABSTOP,7,7,153,10
CONTROL "Open files in new tabs",
IDC_NEW_TABS,"Button",BS_AUTOCHECKBOX | WS_GROUP |
WS_TABSTOP,7,21,153,10
GROUPBOX "Current directory",IDC_STATIC,7,35,164,58,WS_GROUP
CONTROL "Set to &source file path",IDC_CD_SOURCE_PATH,"Button",
BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,17,49,85,10
CONTROL "Set to &parent directory of source file path",
IDC_CD_SOURCE_PARENT,"Button",BS_AUTORADIOBUTTON,17,63,
143,10
CONTROL "Do &not change",IDC_CD_NONE,"Button",BS_AUTORADIOBUTTON,
17,78,63,10
DEFPUSHBUTTON "&Ok",IDOK,7,102,74,14,WS_GROUP
PUSHBUTTON "&Cancel",IDCANCEL,97,102,74,14,WS_GROUP
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_ADDINMAIN, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 171
TOPMARGIN, 7
BOTTOMMARGIN, 117
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_VISVIM_LONGNAME "Vim Developer Studio Add-In"
IDS_VISVIM_DESCRIPTION "Allows integration of Vim as the text editor in Developer Studio."
IDS_CMD_DIALOG "\nVim Add-In Dialog\nDisplays the options dialog box of the Vim Add-In\nVim Add-In Dialog"
IDS_CMD_ENABLE "\nEnable Vim Add-In\nEnables Vim as Visual Studio editor\nEnable Vim Add-In"
IDS_CMD_DISABLE "\nDisable Vim Add-In\nDisables Vim as Visual Studio editor\nDisable Vim Add-In"
IDS_CMD_TOGGLE "\nToggle Vim Add-In State\nToggles the enable state of the Vim Add-In\nToggle Vim Add-In State"
IDS_CMD_LOAD "\nVim Add-In Load Document\nLoads the current document in Vim\nVim Add-In Load Document"
END
#endif // Englisch (USA) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif
#include "afxres.rc" // Standard components
#endif
1 TYPELIB "VisVim.tlb"
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@ -1,91 +0,0 @@
========================================================================
DEVELOPER STUDIO ADD-IN : VisVim
========================================================================
The Add-in Wizard has created this VisVim DLL for you. This DLL not only
demonstrates the basics of creating a Developer Studio add-in, but it is also
a starting point for writing your own add-in.
An add-in mainly does two things.
(1) It adds commands to Developer Studio, which can then be tied
to keystrokes or toolbar buttons by the user or programmatically
by the add-in.
(2) It responds to events fired by Developer Studio.
In both cases, the add-in code has access to the full Developer Studio
Automation Object Model, and may manipulate those objects to affect the
behavior of Developer Studio.
This file contains a summary of what you will find in each of the files that
make up your VisVim DLL.
VisVim.h
This is the main header file for the DLL. It declares the
CVisVimApp class.
VisVim.cpp
This is the main DLL source file. It contains the class CVisVimApp.
It also contains the OLE entry points required of inproc servers.
VisVim.odl
This file contains the Object Description Language source code for the
type library of your DLL.
VisVim.rc
This is a listing of all of the Microsoft Windows resources that the
program uses. It includes the sample toolbar bitmap that is stored
in the RES subdirectory. This file can be directly edited in Microsoft
Developer Studio.
res\VisVim.rc2
This file contains resources that are not edited by Microsoft
Developer Studio. You should place all resources not
editable by the resource editor in this file.
VisVim.def
This file contains information about the DLL that must be
provided to run with Microsoft Windows. It defines parameters
such as the name and description of the DLL. It also exports
functions from the DLL.
VisVim.clw
This file contains information used by ClassWizard to edit existing
classes or add new classes. ClassWizard also uses this file to store
information needed to create and edit message maps and dialog data
maps and to create prototype member functions.
/////////////////////////////////////////////////////////////////////////////
Add-in-specific files:
DSAddIn.cpp, DSAddIn.h
These files contain the CDSAddIn class, which implements the
IDSAddIn interface. This interface contains handlers
for connecting and disconnecting the add-in.
Commands.cpp, Commands.h
These files contain the CCommands class, which implements your
command dispatch interface. This interface contains one method
for each command you add to Developer Studio.
These files also contain stub implementations of handlers for all events
fired by the Developer Studio Application object.
OleAut.cpp
These files contain a general OLE automation class used to communicate
with vim.
Reg.cpp
These files contain functions to access the registry.
/////////////////////////////////////////////////////////////////////////////
Other standard files:
StdAfx.h, StdAfx.cpp
These files are used to build a precompiled header (PCH) file
named VisVim.pch and a precompiled types file named StdAfx.obj.
Resource.h
This is the standard header file, which defines new resource IDs.
Microsoft Developer Studio reads and updates this file.

View File

@ -699,6 +699,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
698,
/**/
697,
/**/

View File

@ -5,7 +5,7 @@ There are three ways to remove Vim:
1. With the GUI uninstaller.
This is only available when Vim was installed with the self-installing
executable. This has a minimal number of questions. It can delete
everything that was installed. This also unregisters the VisVim.dll.
everything that was installed.
2. With uninstall.exe.
This removes most installed items, but does not delete the files you