Страница: 1 |
Страница: 1 |
Вопрос: гдето косяк в длл
Добавлено: 20.11.06 13:08
Автор вопроса: Skywalker | Web-сайт:
чтото я не нзаю что да как делать. пытаюсь создать длл, вот код:
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Public Class Class1
Public Shared device As Device = Nothing
Public Shared Function InitializeGraphics(ByVal frm As System.Windows.Forms.Form) As Boolean
Try
Dim presentParams As New PresentParameters
presentParams.Windowed = True
presentParams.SwapEffect = SwapEffect.Discard
device = New Device(0, DeviceType.Hardware, frm, _
CreateFlags.SoftwareVertexProcessing, presentParams)
Return True
Catch e As DirectXException
Return False
End Try
End Function
Public Shared Sub Render()
If device Is Nothing Then
Return
End If
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0F, 0)
device.BeginScene()
device.EndScene()
device.Present()
End Sub
End Class
вот далее в проекте самом подключаю ее пишу
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim engine As New sky_engine.Class1
If Not (engine.InitializeGraphics(Me)) Then
MsgBox("error")
End If
While Me.Created
engine.Render()
System.Windows.Forms.Application.DoEvents()
End While
End Sub
End Class
во первых возникает вопрос как сделать чтоб было не sky_engine.class1 а Как во всех норм длл просто as new sky_engine
во вторых он на это ругаеца и предлагает заменить engine на sky_engine.class1
если заменить, то выдает такую ошибку:
DLL 'C:\WINDOWS\assembly\GAC\Microsoft.DirectX.Direct3D\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.Direct3D.dll' is attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.
подскажите что я не так делаю?
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 20.11.06 15:01
А зачем ты пишешь класс, если объявляешь внутренние данные и явно инстансовые методы как shared?..
Номер ответа: 2
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #2
Добавлено: 20.11.06 15:41
Я откуда знаю что я делаю, напиши как надо?))
Номер ответа: 3
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #3
Добавлено: 21.11.06 11:15
Ндя... тот еще вопросик... ну если автор не знает что делать, то остальным даже и телепатия не поможет
Номер ответа: 4
Автор ответа:
danser
ICQ: 299287824
Вопросов: 76
Ответов: 209
Профиль | | #4
Добавлено: 21.11.06 14:36
The Best
Лучшее что встречал на подобных форумах.
Номер ответа: 5
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #5
Добавлено: 21.11.06 22:53
мда, ну я знаю что тупо звучит, но че тут не ясного, я просто ни разу не писал еще библиотеку и хз нада там классы ненада. по сорцам все видно что я хочу сделать.
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 21.11.06 23:34
Тебе бы, для начала, про модификаторы доступа что-нибудь почитать.. а потом уже за либы браться.. (имхо)
Номер ответа: 7
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #7
Добавлено: 22.11.06 17:09
Это значит, что в DllMain нельзя помещать managed code, т.к. это может привести к тому, что dll не будет загружаться
Номер ответа: 8
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #8
Добавлено: 30.11.06 21:07
ну помогите пожалуйста просто я почему-то не знаю что нужно сделать...
вот код:
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Public Class Form1
Private device As Device = Nothing
Public Function InitializeGraphics() As Boolean
Try
Dim presentParams As New PresentParameters
presentParams.Windowed = True
presentParams.SwapEffect = SwapEffect.Discard
device = New Device(0, DeviceType.Hardware, Me, _
CreateFlags.SoftwareVertexProcessing, presentParams)
Return True
Catch e As DirectXException
Return False
End Try
End Function
Shared Sub Main()
Dim frm As New Form1()
If Not frm.InitializeGraphics() Then
MessageBox.Show("irect3D не инициализируется."
Return
End If
frm.Show()
While frm.Created
frm.Render()
Application.DoEvents()
End While
End Sub
Private Sub Render()
If device Is Nothing Then
Return
End If
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0F, 0)
device.BeginScene()
device.EndScene()
device.Present()
End Sub
End Class
как разделить его на длл и основной проект, чтоб в проекте например написать
dim eng as new engine
Ну а дальше я не знаю или нужно создавать форму в проекте и посылать ее аргументом в длл или чтоб она прям в длл создавалась... В общем основная проблема, что я не пойму как разделить это на длл и основной проект. Помогите.