Неявное подключение и использование динамических библиотек (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;
}

Читать далее

Реклама

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

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

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

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