Подожди. Не пойму, зачем тебе код вне длл. Есть же исходники хука. Там сможешь и неточности с параметрами поправить, и свои функции добавить. Зачем их с модом тащить, если можно в заголовочных файлах прописать? А компилятор уж сам всё как надо в длл упихает.
Если использовать только свои моды и делать всё только для себя, то да, модифицировать непосредственно сам хук это идеальный вариант.
Но, хочется же универсальности решения.
Минусы модификации хука:
1. При изменении хука создаётся вероятность (хоть и довольно небольшая), что некоторые моды иных авторов не смогут корректно работать
2. Если мы хотим поделиться с кем-то нашими модами, что принимающему человеку придётся заменять и сам хук на нашу его модификацию. А если таким же образом пойдут и другие авторы модов? Под каждый мод ставить свой хук?
Мне кажется, каждый раз заливать заново фундамент дома при необходимости повесить другую занавеску на окно это не самый лучший выход.
P.S. Если я тебя не корректно понял и ты не про модификацию хука, а про создание внешней DLL вместо использования в папке SCRIPTS файлов-исходников, то тут у меня тоже не получилось осуществить взаимодействие двух dll - при вызове функции ругается, что не найден файл библиотеки, хотя он есть.
Опишу подробно:
Файл 1 (библиотека): C:\GAMES\GTAIV_A.net.dll
Имя проекта: GTAIV_A (просто имя в Visual Studio)
Свойства проекта\Приложение:
Имя сборки: GTAIV_A.net (т.е. название конечного файла будет GTAIV_A.net.dll)
Корневое пространство имён: <не указано>
Целевая платформа: .NET Framework 4
Тип приложения: Библиотека классов
Свойства проекта\Ссылки:
ScriptHookDotNet
System
System.Core
System.Data
System.Data.SetExtensions
System.Windows.Forms
System.Xml
System.Xml.Linq
Содержание проекта:
Class1.vb
Imports System
Imports System.Windows.Forms
Imports GTA
Public Class GTAIV_1
Public Function TestFunc1() As Boolean
Return True
End Function
Public Shared Function TestFunc2() As Boolean
Return False
End Function
End Class
Файл 2 (использующий внешнюю библиотеку): C:\GAMES\GTAIV_B.net.dll
Имя проекта: GTAIV_B (просто имя в Visual Studio)
Свойства проекта\Приложение:
Имя сборки: GTAIV_B.net (т.е. название конечного файла будет GTAIV_B.net.dll)
Корневое пространство имён: <не указано>
Целевая платформа: .NET Framework 4
Тип приложения: Библиотека классов
Свойства проекта\Ссылки:
GTAIV_A
ScriptHookDotNet
System
System.Core
System.Data
System.Data.SetExtensions
System.Windows.Forms
System.Xml
System.Xml.Linq
Содержание проекта:
Class2.vb
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports GTA
Public Class GTAIV_2
Inherits Script
'Private lib1 As New GTAIV_1
Public Sub New()
Wait(1000)
GTA.Game.Console.Print("<<< === It works! === >>>")
End Sub
Private Sub Main_KeyDown(ByVal sender As Object, ByVal e As GTA.KeyEventArgs) Handles MyBase.KeyDown
If e.Key = Keys.Scroll Then
Dim lib1 As New GTAIV_1
Game.DisplayText("TEST: " & lib1.TestFunc1(), 1000)
'Game.DisplayText("TEST: " & lib1.TestFunc2(), 1000)
End If
End Sub
End Class
Скрин ошибки в игре при нажатии на ScrollLock
Сообщение отредактировал vorotkov: 05 November 2015 - 12:29