Неявное подключение и использование динамических библиотек (dll)

Для того, чтобы можно было пользоваться функциями расположенными в динамической библиотеке их нужно объявлять с ключевым словом __declspec(dllexport), например: void __declspec(dllexport) MyFunc(), а вот в проекте, к которому будет подключен dll файл, следует, придерживаться данному правилу объявления импортируемых функций: void __declspec(dllimport) MyFunc(). Для наглядности я опишу процесс создания библиотеки dll и её использования.
В качестве примера запихаем в dll функцию сложения двух чисел. Для начала объявим прототип функции сложения в заголовочном файле header.h:

int __declspec(dllexport) Sum(int a, int b);

И реализуем в файле DllMain.cpp:

#include <windows.h>
#include "header.h"

bool APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
	return true;
}

int __declspec(dllexport) Sum(int a, int b)
{
	return a + b;
}

Читать далее

Осторожно! Мошенники! http://apples-msk.ru (сейчас http://apl-msk.ru)

Начнем по порядку.

1. В августе 2014 года, а именно 2.04.2014 года задумался я о приобретении Apple iPhone. Выбрал модель 5S Gold 16Gb. Очень долго искал, в каком бы интернет-магазине произвести покупку.

2. Выбор мой пал на сайт http://apples-msk.ru (сейчас http://apl-msk.ru)

С первого взгляда все оказалось хорошо, выбрал модель, приобрел. Но как оказалось, история покупки только началась… Читать далее

Как узнать родителя процесса

Как узнать родителя процесса:

Imports System.ComponentModel

Imports System.Runtime.InteropServices
    <DllImport("ntdll.dll", EntryPoint:="NtQueryInformationProcess")> _
    Public Function NtQueryInformationProcess(ByVal handle As IntPtr, _
                                              ByVal processinformationclass As UInteger, _
                                              ByRef ProcessInformation As Process_Basic_Information, _
                                              ByVal ProcessInformationLength As Integer, _
                                              ByRef ReturnLength As UInteger) As Integer
    End Function

    Public Structure Process_Basic_Information
        Public ExitStatus As IntPtr
        Public PepBaseAddress As IntPtr
        Public AffinityMask As IntPtr
        Public BasePriority As IntPtr
        Public UniqueProcessID As IntPtr
        Public InheritedFromUniqueProcessId As IntPtr
    End Structure

   'Получение родителя процесса
    Public Function ParentID(ByRef Proc As Process) As IntPtr
        Dim PBI = New Process_Basic_Information()
        Dim writed As Integer

        Try
            If NtQueryInformationProcess(Proc.Handle, 0, PBI, Marshal.SizeOf(PBI), writed) <> 0 Then
                Throw New Win32Exception(Marshal.GetLastWin32Error())
            End If
#If DEBUG Then
            MsgBox("Process Name: " & Proc.ProcessName & vbCrLf & _
                   "Parent ID: " & Convert.ToString(PBI.InheritedFromUniqueProcessId), _
                   MsgBoxStyle.OkOnly)
#End If
            Return PBI.InheritedFromUniqueProcessId
        Catch ex As Exception
#If DEBUG Then
            MsgBox("Error:" & vbCrLf & ex.Message, MsgBoxStyle.OkOnly, ex.Source)
#End If
            Return 0
        End Try
    End Function

    Public Function ParentID(ByVal ProcID As IntPtr) As IntPtr
        Dim PBI = New Process_Basic_Information()
        Dim writed As Integer
        Dim Proc As Process

        Try
            Proc = Process.GetProcessById(ProcID)
            Try
                If NtQueryInformationProcess(Proc.Handle, 0, PBI, Marshal.SizeOf(PBI), writed) <> 0 Then
                    Throw New Win32Exception(Marshal.GetLastWin32Error())
                End If
#If DEBUG Then
                MsgBox("Process Name: " & Proc.ProcessName & vbCrLf & _
                       "Parent ID: " & Convert.ToString(PBI.InheritedFromUniqueProcessId), _
                       MsgBoxStyle.OkOnly)
#End If
                Return PBI.InheritedFromUniqueProcessId
            Catch ex As Exception
#If DEBUG Then
                MsgBox("Error:" & vbCrLf & ex.Message, MsgBoxStyle.OkOnly, ex.Source)
#End If
                Return 0
            End Try
        Catch ex As Exception
#If DEBUG Then
            MsgBox("Error:" & vbCrLf & ex.Message, MsgBoxStyle.OkOnly, ex.Source)
#End If
            Return 0
        End Try
    End Function

Проверим наличие интернет соединения

Проверим наличие интернет соединения на VBA с помощью функции из библиотеки wininet.dll:

Private Declare Function InternetGetConnectedState _  
Lib "wininet.dll" (ByRef lpSFlags As Long, _  
ByVal dwReserved As Long) As Long  
  
Public Function InternetConnected() As Boolean  
  
  'Если у вас есть соединение, то функция вернет True, иначе - False  
  InternetConnected = InternetGetConnectedState(0&, 0&)  
  
End Function

Список надстроек в библиотеке и памяти

Просмотреть список надстроек, хранящихся в папке библиотеки (LIBRARY) и в памяти:

Sub AddIns_List()  
Dim iFor%, iRow%, WS As Worksheet  
  
  iRow = 1  
  Set WS = ThisWorkbook.Worksheets("AddIns")  
  
'Видит только папку LIBRARY  
  If Application.AddIns.Count > 0 Then  
  WS.Cells(iRow, 1) = "Установлены следующие надстройки (AddIns):"  
  For iFor = 1 To Application.AddIns.Count  
  iRow = iRow + 1  
  WS.Cells(iRow, 1) = Application.AddIns.Item(iFor).FullName  
  Next iFor  
  End If  
  
' - Только для офиса 2010 и 2013  
#If VBA7 Then  
  If iRow > 1 Then iRow = iRow + 1  
'Видит только папку LIBRARY и то, что сейчас есть в памяти  
  If Application.AddIns2.Count > 0 Then  
  WS.Cells(iRow, 1) = "Установлены следующие надстройки (AddIns2):"  
  For iFor = 1 To Application.AddIns2.Count  
  iRow = iRow + 1  
  WS.Cells(iRow, 1) = Application.AddIns2.Item(iFor).FullName  
  Next iFor  
  End If  
  
  If iRow > 1 Then iRow = iRow + 1  
'Description, Guid, ProgId - String; Connect - Boolean  
  If Application.COMAddIns.Count > 0 Then  
  WS.Cells(iRow, 1) = "Установлены следующие надстройки (COMAddIns):"  
  For iFor = 1 To Application.COMAddIns.Count  
  iRow = iRow + 1  
  WS.Cells(iRow, 1) = Application.COMAddIns.Item(iFor).Description  
  Next iFor  
  End If  
#End If  
  
If Not WS Is Nothing Then Set WS = Nothing  
End Sub

Microsoft Visual Studio — линейка продуктов компании Майкрософт

Microsoft Visual Studio — линейка продуктов компании Майкрософт, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft Windows, Windows Mobile, Windows CE, .NET Framework, Xbox, Windows Phone .NET Compact Framework и Microsoft Silverlight.
Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как например, Subversion и Visual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов процесса разработки программного обеспечения (например, клиент Team Explorer для работы с Team Foundation Server).

ms_vs

VBA — Visual Basic for Applications

Visual Basic for Applications (VBA, Visual Basic для приложений) — немного упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office (включая версии для Mac OS), а также во многие другие программные пакеты, такие как AutoCAD, SolidWorks, CorelDRAW, WordPerfect и ESRI ArcGIS. VBA покрывает и расширяет функциональность ранее использовавшихся специализированных макро-языков, таких как WordBasic.  VBA является интерпретируемым языком. Как и следует из его названия, VBA близок к Visual Basic. VBA, будучи языком, построенным на COM, позволяет использовать все доступные в операционной системе COM объекты и компоненты ActiveX. По сути, возможно создание приложения на основе Microsoft Word VBA, использующего только средства Corel Draw.  В будущем Microsoft планирует заменить VBA на Visual Studio Tools for Applications (VSTA) — инструментарий расширения функциональности приложений, основанный на Microsoft .NET.