473,395 Members | 2,151 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,395 software developers and data experts.

Explicit Linking of DLL's in VB.net

Hello all,

Ok, I want to create a program that will load plugins (dll's) from a
plugin folder. I can create the forms and put them into a dll but I
cannot actually add them dynamically at run time. I have tried to use
the LoadLibrary and GetProc functions, which sort of worked. I got
the pointer to the function but I cannot actually RUN the function
like I can in C++. I have heard some things about Invoking(?) I
believe but I cannot find enough about it. Any comments or
suggestions would be EXTREMELY helpful.

Thanks,

Josh
Jan 31 '07 #1
14 4039
Sorry, not invoke, I meant Interop. I think... Heeelp! : )

On Wed, 31 Jan 2007 19:45:41 GMT, Noone <No**@none.comwrote:
>Hello all,

Ok, I want to create a program that will load plugins (dll's) from a
plugin folder. I can create the forms and put them into a dll but I
cannot actually add them dynamically at run time. I have tried to use
the LoadLibrary and GetProc functions, which sort of worked. I got
the pointer to the function but I cannot actually RUN the function
like I can in C++. I have heard some things about Invoking(?) I
believe but I cannot find enough about it. Any comments or
suggestions would be EXTREMELY helpful.

Thanks,

Josh
Jan 31 '07 #2
Well i did this with an interface

here is my reallife code from a wotking project ( sorry comments are for my
co workers and they are Dutch )

'--------------------------------------------------------------------------------------

'---

'--- clsGetObjectFromFile

'---

'--- Purpose : start returns an initiated IiQueuObject

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 14-11-2006

'--- Revissions : 21-11-2006 : AssPath ingebouwd voor flexibiliteid

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Imports System.IO

Public Class clsGetObjectFromFile

''' <summary>

''' Laad een object by zijn assembly naam en class naam

''' het te laden object moet een IiQueuObject interface bezitten

''' </summary>

''' <param name="vstrAssemblyName">Name of the VSTR assembly.</param>

''' <param name="vstrClassName">Name of the VSTR class.</param>

''' <returns></returns>

Public Shared Function LoadMeByName(ByVal vstrAssemblyName As String, _

ByVal vstrClassName As String) As ista.IiQueuObject

'<21-11-2006 MP>

If vstrAssemblyName.StartsWith("[AssPath]") Then

Dim appath As String =
System.Reflection.Assembly.GetExecutingAssembly.Lo cation

vstrAssemblyName = vstrAssemblyName.Replace("[AssPath]", "")

vstrAssemblyName = Path.Combine(appath, vstrAssemblyName)

End If

'</21-11-2006 MP>

Dim objAssembly As Reflection.Assembly

If Not My.Computer.FileSystem.FileExists(vstrAssemblyName ) Then

ServMain.WriteLogentry("Assembly niet aanwezig : " & vstrAssemblyName,
EventLogEntryType.Error)

'de assembly is niet aanwezig op deze lokatie

Return Nothing

End If

objAssembly = Reflection.Assembly.LoadFrom(vstrAssemblyName)

'voer een cast uit naar ista.IiQueuObject interface

Try

LoadMeByName = DirectCast(objAssembly.CreateInstance(vstrClassNam e),
ista.IiQueuObject)

Catch ex As Exception

ServMain.WriteLogentry("Assembly bezit niet de juiste interface : " &
vstrAssemblyName, EventLogEntryType.Error)

Return Nothing

End Try

If LoadMeByName Is Nothing Then

Dim msg As String

msg = "Assembly : " & vstrAssemblyName & Environment.NewLine & _

"Type : " & vstrClassName & " is niet gestart om onduidelijke reden"

ServMain.WriteLogentry(msg, EventLogEntryType.Error)

'geen error gewoon niets terug geven

'wanneer we dus iets anders hebben als een Nothing pointer

'dan hebben we een geinitialiseerd object

Return Nothing

End If

End Function

End Class

here is my generic interface

'--------------------------------------------------------------------------------------

'---

'--- Purpose : Provide an generic interface for the Queu

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 20-11-2006

'--- Revissions :

'---

'--- Remarks : Do not break the interface signature !!

'--- you may extend but never remove property`s or methods

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Public Interface IiQueuObject

Sub StartProcessing()

Property Parameters() As String

Property ProcessId() As String

Event eFinished(ByVal ProcessId As String, ByVal msg As String)

Event eError(ByVal ProcessId As String, ByVal msg As String)

Event eProcessCancelled(ByVal ProcessId As String, ByVal msg As String)

Property CancellProcess() As Boolean

End Interface

now i can just use anny object like this

'het object welke we gaan starten

'OTask wordt gedefinieerd as ista.IiQueuObject

'we kunnen dus ieder mogelijk object opstarten indien het deze interface
heeft geimplementeerd

Dim oTask As ista.IiQueuObject =
clsGetObjectFromFile.LoadMeByName(Dr.Item("Assembl yNaam").ToString,
Dr.Item("AssemblyType").ToString)

If Not IsNothing(oTask) Then

otask.StartProcessing()

end if
HTH

Michel Posseth [MCP]





"Noone" <No**@none.comschreef in bericht
news:uo********************************@4ax.com...
Sorry, not invoke, I meant Interop. I think... Heeelp! : )

On Wed, 31 Jan 2007 19:45:41 GMT, Noone <No**@none.comwrote:
>>Hello all,

Ok, I want to create a program that will load plugins (dll's) from a
plugin folder. I can create the forms and put them into a dll but I
cannot actually add them dynamically at run time. I have tried to use
the LoadLibrary and GetProc functions, which sort of worked. I got
the pointer to the function but I cannot actually RUN the function
like I can in C++. I have heard some things about Invoking(?) I
believe but I cannot find enough about it. Any comments or
suggestions would be EXTREMELY helpful.

Thanks,

Josh

Jan 31 '07 #3
Thank you very much for the post but I have no idea what you are
doing. I have never worked with any of the "Reflection" classes. I
am a bit newer to VB.net so I think I am missing something. Can you
explain what is going on in more detail and less Dutch? hehe... : )

Thanks,

Josh

On Wed, 31 Jan 2007 21:15:08 +0100, "Michel Posseth [MCP]"
<MS**@posseth.comwrote:
>Well i did this with an interface

here is my reallife code from a wotking project ( sorry comments are for my
co workers and they are Dutch )

'--------------------------------------------------------------------------------------

'---

'--- clsGetObjectFromFile

'---

'--- Purpose : start returns an initiated IiQueuObject

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 14-11-2006

'--- Revissions : 21-11-2006 : AssPath ingebouwd voor flexibiliteid

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Imports System.IO

Public Class clsGetObjectFromFile

''' <summary>

''' Laad een object by zijn assembly naam en class naam

''' het te laden object moet een IiQueuObject interface bezitten

''' </summary>

''' <param name="vstrAssemblyName">Name of the VSTR assembly.</param>

''' <param name="vstrClassName">Name of the VSTR class.</param>

''' <returns></returns>

Public Shared Function LoadMeByName(ByVal vstrAssemblyName As String, _

ByVal vstrClassName As String) As ista.IiQueuObject

'<21-11-2006 MP>

If vstrAssemblyName.StartsWith("[AssPath]") Then

Dim appath As String =
System.Reflection.Assembly.GetExecutingAssembly.L ocation

vstrAssemblyName = vstrAssemblyName.Replace("[AssPath]", "")

vstrAssemblyName = Path.Combine(appath, vstrAssemblyName)

End If

'</21-11-2006 MP>

Dim objAssembly As Reflection.Assembly

If Not My.Computer.FileSystem.FileExists(vstrAssemblyName ) Then

ServMain.WriteLogentry("Assembly niet aanwezig : " & vstrAssemblyName,
EventLogEntryType.Error)

'de assembly is niet aanwezig op deze lokatie

Return Nothing

End If

objAssembly = Reflection.Assembly.LoadFrom(vstrAssemblyName)

'voer een cast uit naar ista.IiQueuObject interface

Try

LoadMeByName = DirectCast(objAssembly.CreateInstance(vstrClassNam e),
ista.IiQueuObject)

Catch ex As Exception

ServMain.WriteLogentry("Assembly bezit niet de juiste interface : " &
vstrAssemblyName, EventLogEntryType.Error)

Return Nothing

End Try

If LoadMeByName Is Nothing Then

Dim msg As String

msg = "Assembly : " & vstrAssemblyName & Environment.NewLine & _

"Type : " & vstrClassName & " is niet gestart om onduidelijke reden"

ServMain.WriteLogentry(msg, EventLogEntryType.Error)

'geen error gewoon niets terug geven

'wanneer we dus iets anders hebben als een Nothing pointer

'dan hebben we een geinitialiseerd object

Return Nothing

End If

End Function

End Class

here is my generic interface

'--------------------------------------------------------------------------------------

'---

'--- Purpose : Provide an generic interface for the Queu

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 20-11-2006

'--- Revissions :

'---

'--- Remarks : Do not break the interface signature !!

'--- you may extend but never remove property`s or methods

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Public Interface IiQueuObject

Sub StartProcessing()

Property Parameters() As String

Property ProcessId() As String

Event eFinished(ByVal ProcessId As String, ByVal msg As String)

Event eError(ByVal ProcessId As String, ByVal msg As String)

Event eProcessCancelled(ByVal ProcessId As String, ByVal msg As String)

Property CancellProcess() As Boolean

End Interface

now i can just use anny object like this

'het object welke we gaan starten

'OTask wordt gedefinieerd as ista.IiQueuObject

'we kunnen dus ieder mogelijk object opstarten indien het deze interface
heeft geimplementeerd

Dim oTask As ista.IiQueuObject =
clsGetObjectFromFile.LoadMeByName(Dr.Item("Assemb lyNaam").ToString,
Dr.Item("AssemblyType").ToString)

If Not IsNothing(oTask) Then

otask.StartProcessing()

end if
HTH

Michel Posseth [MCP]





"Noone" <No**@none.comschreef in bericht
news:uo********************************@4ax.com.. .
>Sorry, not invoke, I meant Interop. I think... Heeelp! : )

On Wed, 31 Jan 2007 19:45:41 GMT, Noone <No**@none.comwrote:
>>>Hello all,

Ok, I want to create a program that will load plugins (dll's) from a
plugin folder. I can create the forms and put them into a dll but I
cannot actually add them dynamically at run time. I have tried to use
the LoadLibrary and GetProc functions, which sort of worked. I got
the pointer to the function but I cannot actually RUN the function
like I can in C++. I have heard some things about Invoking(?) I
believe but I cannot find enough about it. Any comments or
suggestions would be EXTREMELY helpful.

Thanks,

Josh
Jan 31 '07 #4
Hi Josh,

What kind of plugin dll you are trying to link, .Net assembly dll or pure
unmanaged code dll? If it is unmanaged code dll, then is the function you
want to call exported as function API through dll export table or the COM
dll?

If this is a .Net assembly dll, the recommended way of calling methods in
the dll is using .Net Reflection Michel pointed out. Reflection is a .Net
feature which allows us to dynamically load other .Net types and
dynamically call the members of the loaded types. Please refer to the
articles below for a start(although it is in language C#, the idea is the
same for all .Net languages):
"An Introduction to Reflection in C#"
http://www.codeguru.com/csharp/cshar...le.php/c4257__
1
"Reflection in .NET"
http://www.c-sharpcorner.com/UploadF...tionin.NET1203
2005045926AM/Reflectionin.NET.aspx

Regarding unmanaged Win32 dll exported functions; you should use p/invoke
technology in .Net to get it done. Below article is a good start:
"Calling Win32 DLLs in C# with P/Invoke"
http://msdn.microsoft.com/msdnmag/issues/03/07/NET/

If your dll is a legacy COM dll, the solution is COM interop. COM interop
is a big topic, please refer to the article below:
"Introduction to COM Interop"
http://msdn.microsoft.com/msdnmag/is...t/default.aspx

Hope this helps.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscripti...ult.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscripti...t/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.

Feb 1 '07 #5
Hello Noone

The concept is pretty simple

1. create a generic interface and compile this to a dll
2. create your plugin and implement the interface in the class you want to
start from the outside

3. create a application and set a reference to the interface dll

now you do

Dim objAssembly As Reflection.Assembly
objAssembly = Reflection.Assembly.LoadFrom(FullPathToAssemblyDll OrExe)

Dim YourObject as Yourinterface =
DirectCast(objAssembly.CreateInstance(Namespace.Yo urClassToInvoke),
Yourinterface)

Note :
Namespace.YourClassToInvoke ( namespace defaults to the assembly name but
can be set under project , properties , application , root namespace )

And that`s it !! :-)

YourObject is now initiated and can be controled from your code with the
interface that you provided

if You need anny more help feel free to ask ( i can create a small demo for
you and upload it to my server for you to download )
Regards

Michel Posseth

"Noone" wrote:
Thank you very much for the post but I have no idea what you are
doing. I have never worked with any of the "Reflection" classes. I
am a bit newer to VB.net so I think I am missing something. Can you
explain what is going on in more detail and less Dutch? hehe... : )

Thanks,

Josh

On Wed, 31 Jan 2007 21:15:08 +0100, "Michel Posseth [MCP]"
<MS**@posseth.comwrote:
Well i did this with an interface

here is my reallife code from a wotking project ( sorry comments are for my
co workers and they are Dutch )

'--------------------------------------------------------------------------------------

'---

'--- clsGetObjectFromFile

'---

'--- Purpose : start returns an initiated IiQueuObject

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 14-11-2006

'--- Revissions : 21-11-2006 : AssPath ingebouwd voor flexibiliteid

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Imports System.IO

Public Class clsGetObjectFromFile

''' <summary>

''' Laad een object by zijn assembly naam en class naam

''' het te laden object moet een IiQueuObject interface bezitten

''' </summary>

''' <param name="vstrAssemblyName">Name of the VSTR assembly.</param>

''' <param name="vstrClassName">Name of the VSTR class.</param>

''' <returns></returns>

Public Shared Function LoadMeByName(ByVal vstrAssemblyName As String, _

ByVal vstrClassName As String) As ista.IiQueuObject

'<21-11-2006 MP>

If vstrAssemblyName.StartsWith("[AssPath]") Then

Dim appath As String =
System.Reflection.Assembly.GetExecutingAssembly.Lo cation

vstrAssemblyName = vstrAssemblyName.Replace("[AssPath]", "")

vstrAssemblyName = Path.Combine(appath, vstrAssemblyName)

End If

'</21-11-2006 MP>

Dim objAssembly As Reflection.Assembly

If Not My.Computer.FileSystem.FileExists(vstrAssemblyName ) Then

ServMain.WriteLogentry("Assembly niet aanwezig : " & vstrAssemblyName,
EventLogEntryType.Error)

'de assembly is niet aanwezig op deze lokatie

Return Nothing

End If

objAssembly = Reflection.Assembly.LoadFrom(vstrAssemblyName)

'voer een cast uit naar ista.IiQueuObject interface

Try

LoadMeByName = DirectCast(objAssembly.CreateInstance(vstrClassNam e),
ista.IiQueuObject)

Catch ex As Exception

ServMain.WriteLogentry("Assembly bezit niet de juiste interface : " &
vstrAssemblyName, EventLogEntryType.Error)

Return Nothing

End Try

If LoadMeByName Is Nothing Then

Dim msg As String

msg = "Assembly : " & vstrAssemblyName & Environment.NewLine & _

"Type : " & vstrClassName & " is niet gestart om onduidelijke reden"

ServMain.WriteLogentry(msg, EventLogEntryType.Error)

'geen error gewoon niets terug geven

'wanneer we dus iets anders hebben als een Nothing pointer

'dan hebben we een geinitialiseerd object

Return Nothing

End If

End Function

End Class

here is my generic interface

'--------------------------------------------------------------------------------------

'---

'--- Purpose : Provide an generic interface for the Queu

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 20-11-2006

'--- Revissions :

'---

'--- Remarks : Do not break the interface signature !!

'--- you may extend but never remove property`s or methods

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Public Interface IiQueuObject

Sub StartProcessing()

Property Parameters() As String

Property ProcessId() As String

Event eFinished(ByVal ProcessId As String, ByVal msg As String)

Event eError(ByVal ProcessId As String, ByVal msg As String)

Event eProcessCancelled(ByVal ProcessId As String, ByVal msg As String)

Property CancellProcess() As Boolean

End Interface

now i can just use anny object like this

'het object welke we gaan starten

'OTask wordt gedefinieerd as ista.IiQueuObject

'we kunnen dus ieder mogelijk object opstarten indien het deze interface
heeft geimplementeerd

Dim oTask As ista.IiQueuObject =
clsGetObjectFromFile.LoadMeByName(Dr.Item("Assembl yNaam").ToString,
Dr.Item("AssemblyType").ToString)

If Not IsNothing(oTask) Then

otask.StartProcessing()

end if
HTH

Michel Posseth [MCP]





"Noone" <No**@none.comschreef in bericht
news:uo********************************@4ax.com...
Sorry, not invoke, I meant Interop. I think... Heeelp! : )

On Wed, 31 Jan 2007 19:45:41 GMT, Noone <No**@none.comwrote:

Hello all,

Ok, I want to create a program that will load plugins (dll's) from a
plugin folder. I can create the forms and put them into a dll but I
cannot actually add them dynamically at run time. I have tried to use
the LoadLibrary and GetProc functions, which sort of worked. I got
the pointer to the function but I cannot actually RUN the function
like I can in C++. I have heard some things about Invoking(?) I
believe but I cannot find enough about it. Any comments or
suggestions would be EXTREMELY helpful.

Thanks,

Josh

Feb 1 '07 #6
Hah... Luckily it is looking like I am doing something right. With
further research that is exactly the way I went. I found I could load
a form exactly how you did it. I do have one question though. The
"YourObject" is a form and is limited to the form methods. How can I
send information and and forth from the main program to the external
dll? Any ideas? Right now I am limited to form.show, form.height,
etc etc. Nothing that I create...

Thanks!

Btw, for the previous post, it is a vb.net dll. Aka mananged, I
believe....? (can you tell I am a bit new to this?)

On Thu, 1 Feb 2007 06:37:01 -0800, Michel Posseth [MCP]
<Mi**************@discussions.microsoft.comwrote :
>Hello Noone

The concept is pretty simple

1. create a generic interface and compile this to a dll
2. create your plugin and implement the interface in the class you want to
start from the outside

3. create a application and set a reference to the interface dll

now you do

Dim objAssembly As Reflection.Assembly
objAssembly = Reflection.Assembly.LoadFrom(FullPathToAssemblyDll OrExe)

Dim YourObject as Yourinterface =
DirectCast(objAssembly.CreateInstance(Namespace.Y ourClassToInvoke),
Yourinterface)

Note :
Namespace.YourClassToInvoke ( namespace defaults to the assembly name but
can be set under project , properties , application , root namespace )

And that`s it !! :-)

YourObject is now initiated and can be controled from your code with the
interface that you provided

if You need anny more help feel free to ask ( i can create a small demo for
you and upload it to my server for you to download )
Regards

Michel Posseth

"Noone" wrote:
>Thank you very much for the post but I have no idea what you are
doing. I have never worked with any of the "Reflection" classes. I
am a bit newer to VB.net so I think I am missing something. Can you
explain what is going on in more detail and less Dutch? hehe... : )

Thanks,

Josh

On Wed, 31 Jan 2007 21:15:08 +0100, "Michel Posseth [MCP]"
<MS**@posseth.comwrote:
>Well i did this with an interface

here is my reallife code from a wotking project ( sorry comments are for my
co workers and they are Dutch )

'--------------------------------------------------------------------------------------

'---

'--- clsGetObjectFromFile

'---

'--- Purpose : start returns an initiated IiQueuObject

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 14-11-2006

'--- Revissions : 21-11-2006 : AssPath ingebouwd voor flexibiliteid

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Imports System.IO

Public Class clsGetObjectFromFile

''' <summary>

''' Laad een object by zijn assembly naam en class naam

''' het te laden object moet een IiQueuObject interface bezitten

''' </summary>

''' <param name="vstrAssemblyName">Name of the VSTR assembly.</param>

''' <param name="vstrClassName">Name of the VSTR class.</param>

''' <returns></returns>

Public Shared Function LoadMeByName(ByVal vstrAssemblyName As String, _

ByVal vstrClassName As String) As ista.IiQueuObject

'<21-11-2006 MP>

If vstrAssemblyName.StartsWith("[AssPath]") Then

Dim appath As String =
System.Reflection.Assembly.GetExecutingAssembly.L ocation

vstrAssemblyName = vstrAssemblyName.Replace("[AssPath]", "")

vstrAssemblyName = Path.Combine(appath, vstrAssemblyName)

End If

'</21-11-2006 MP>

Dim objAssembly As Reflection.Assembly

If Not My.Computer.FileSystem.FileExists(vstrAssemblyName ) Then

ServMain.WriteLogentry("Assembly niet aanwezig : " & vstrAssemblyName,
EventLogEntryType.Error)

'de assembly is niet aanwezig op deze lokatie

Return Nothing

End If

objAssembly = Reflection.Assembly.LoadFrom(vstrAssemblyName)

'voer een cast uit naar ista.IiQueuObject interface

Try

LoadMeByName = DirectCast(objAssembly.CreateInstance(vstrClassNam e),
ista.IiQueuObject)

Catch ex As Exception

ServMain.WriteLogentry("Assembly bezit niet de juiste interface : " &
vstrAssemblyName, EventLogEntryType.Error)

Return Nothing

End Try

If LoadMeByName Is Nothing Then

Dim msg As String

msg = "Assembly : " & vstrAssemblyName & Environment.NewLine & _

"Type : " & vstrClassName & " is niet gestart om onduidelijke reden"

ServMain.WriteLogentry(msg, EventLogEntryType.Error)

'geen error gewoon niets terug geven

'wanneer we dus iets anders hebben als een Nothing pointer

'dan hebben we een geinitialiseerd object

Return Nothing

End If

End Function

End Class

here is my generic interface

'--------------------------------------------------------------------------------------

'---

'--- Purpose : Provide an generic interface for the Queu

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 20-11-2006

'--- Revissions :

'---

'--- Remarks : Do not break the interface signature !!

'--- you may extend but never remove property`s or methods

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Public Interface IiQueuObject

Sub StartProcessing()

Property Parameters() As String

Property ProcessId() As String

Event eFinished(ByVal ProcessId As String, ByVal msg As String)

Event eError(ByVal ProcessId As String, ByVal msg As String)

Event eProcessCancelled(ByVal ProcessId As String, ByVal msg As String)

Property CancellProcess() As Boolean

End Interface

now i can just use anny object like this

'het object welke we gaan starten

'OTask wordt gedefinieerd as ista.IiQueuObject

'we kunnen dus ieder mogelijk object opstarten indien het deze interface
heeft geimplementeerd

Dim oTask As ista.IiQueuObject =
clsGetObjectFromFile.LoadMeByName(Dr.Item("Assemb lyNaam").ToString,
Dr.Item("AssemblyType").ToString)

If Not IsNothing(oTask) Then

otask.StartProcessing()

end if
HTH

Michel Posseth [MCP]





"Noone" <No**@none.comschreef in bericht
news:uo********************************@4ax.com.. .
Sorry, not invoke, I meant Interop. I think... Heeelp! : )

On Wed, 31 Jan 2007 19:45:41 GMT, Noone <No**@none.comwrote:

Hello all,

Ok, I want to create a program that will load plugins (dll's) from a
plugin folder. I can create the forms and put them into a dll but I
cannot actually add them dynamically at run time. I have tried to use
the LoadLibrary and GetProc functions, which sort of worked. I got
the pointer to the function but I cannot actually RUN the function
like I can in C++. I have heard some things about Invoking(?) I
believe but I cannot find enough about it. Any comments or
suggestions would be EXTREMELY helpful.

Thanks,

Josh


Feb 1 '07 #7
Btw, for the previous post, it is a vb.net dll. Aka mananged, I
believe....? (can you tell I am a bit new to this?)
yes this technique will only work on managed assemblys ( exe or dll )
I do have one question though. The
"YourObject" is a form and is limited to the form methods. How can I
send information and and forth from the main program to the external
dll?
Wel implement propertys , methods , events in your interface and start
comunicating :-)
i thought this is the easiest way , however it is possible to send
parameters to the constructor ( in the CreateInstance method )
however i didn`t bother as i comunicate through my interface with the object
( send parameters through properties, or methods , receive messages back
through events )

regards

Michel


"Noone" <No**@none.comschreef in bericht
news:p4********************************@4ax.com...
Hah... Luckily it is looking like I am doing something right. With
further research that is exactly the way I went. I found I could load
a form exactly how you did it. I do have one question though. The
"YourObject" is a form and is limited to the form methods. How can I
send information and and forth from the main program to the external
dll? Any ideas? Right now I am limited to form.show, form.height,
etc etc. Nothing that I create...

Thanks!

Btw, for the previous post, it is a vb.net dll. Aka mananged, I
believe....? (can you tell I am a bit new to this?)

On Thu, 1 Feb 2007 06:37:01 -0800, Michel Posseth [MCP]
<Mi**************@discussions.microsoft.comwrote :
>>Hello Noone

The concept is pretty simple

1. create a generic interface and compile this to a dll
2. create your plugin and implement the interface in the class you want to
start from the outside

3. create a application and set a reference to the interface dll

now you do

Dim objAssembly As Reflection.Assembly
objAssembly = Reflection.Assembly.LoadFrom(FullPathToAssemblyDll OrExe)

Dim YourObject as Yourinterface =
DirectCast(objAssembly.CreateInstance(Namespace. YourClassToInvoke),
Yourinterface)

Note :
Namespace.YourClassToInvoke ( namespace defaults to the assembly name
but
can be set under project , properties , application , root namespace )

And that`s it !! :-)

YourObject is now initiated and can be controled from your code with the
interface that you provided

if You need anny more help feel free to ask ( i can create a small demo
for
you and upload it to my server for you to download )
Regards

Michel Posseth

"Noone" wrote:
>>Thank you very much for the post but I have no idea what you are
doing. I have never worked with any of the "Reflection" classes. I
am a bit newer to VB.net so I think I am missing something. Can you
explain what is going on in more detail and less Dutch? hehe... : )

Thanks,

Josh

On Wed, 31 Jan 2007 21:15:08 +0100, "Michel Posseth [MCP]"
<MS**@posseth.comwrote:

Well i did this with an interface

here is my reallife code from a wotking project ( sorry comments are
for my
co workers and they are Dutch )

'--------------------------------------------------------------------------------------

'---

'--- clsGetObjectFromFile

'---

'--- Purpose : start returns an initiated IiQueuObject

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 14-11-2006

'--- Revissions : 21-11-2006 : AssPath ingebouwd voor flexibiliteid

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Imports System.IO

Public Class clsGetObjectFromFile

''' <summary>

''' Laad een object by zijn assembly naam en class naam

''' het te laden object moet een IiQueuObject interface bezitten

''' </summary>

''' <param name="vstrAssemblyName">Name of the VSTR assembly.</param>

''' <param name="vstrClassName">Name of the VSTR class.</param>

''' <returns></returns>

Public Shared Function LoadMeByName(ByVal vstrAssemblyName As String, _

ByVal vstrClassName As String) As ista.IiQueuObject

'<21-11-2006 MP>

If vstrAssemblyName.StartsWith("[AssPath]") Then

Dim appath As String =
System.Reflection.Assembly.GetExecutingAssembly. Location

vstrAssemblyName = vstrAssemblyName.Replace("[AssPath]", "")

vstrAssemblyName = Path.Combine(appath, vstrAssemblyName)

End If

'</21-11-2006 MP>

Dim objAssembly As Reflection.Assembly

If Not My.Computer.FileSystem.FileExists(vstrAssemblyName ) Then

ServMain.WriteLogentry("Assembly niet aanwezig : " & vstrAssemblyName,
EventLogEntryType.Error)

'de assembly is niet aanwezig op deze lokatie

Return Nothing

End If

objAssembly = Reflection.Assembly.LoadFrom(vstrAssemblyName)

'voer een cast uit naar ista.IiQueuObject interface

Try

LoadMeByName = DirectCast(objAssembly.CreateInstance(vstrClassNam e),
ista.IiQueuObject)

Catch ex As Exception

ServMain.WriteLogentry("Assembly bezit niet de juiste interface : " &
vstrAssemblyName, EventLogEntryType.Error)

Return Nothing

End Try

If LoadMeByName Is Nothing Then

Dim msg As String

msg = "Assembly : " & vstrAssemblyName & Environment.NewLine & _

"Type : " & vstrClassName & " is niet gestart om onduidelijke reden"

ServMain.WriteLogentry(msg, EventLogEntryType.Error)

'geen error gewoon niets terug geven

'wanneer we dus iets anders hebben als een Nothing pointer

'dan hebben we een geinitialiseerd object

Return Nothing

End If

End Function

End Class

here is my generic interface

'--------------------------------------------------------------------------------------

'---

'--- Purpose : Provide an generic interface for the Queu

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 20-11-2006

'--- Revissions :

'---

'--- Remarks : Do not break the interface signature !!

'--- you may extend but never remove property`s or methods

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Public Interface IiQueuObject

Sub StartProcessing()

Property Parameters() As String

Property ProcessId() As String

Event eFinished(ByVal ProcessId As String, ByVal msg As String)

Event eError(ByVal ProcessId As String, ByVal msg As String)

Event eProcessCancelled(ByVal ProcessId As String, ByVal msg As String)

Property CancellProcess() As Boolean

End Interface

now i can just use anny object like this

'het object welke we gaan starten

'OTask wordt gedefinieerd as ista.IiQueuObject

'we kunnen dus ieder mogelijk object opstarten indien het deze
interface
heeft geimplementeerd

Dim oTask As ista.IiQueuObject =
clsGetObjectFromFile.LoadMeByName(Dr.Item("Assem blyNaam").ToString,
Dr.Item("AssemblyType").ToString)

If Not IsNothing(oTask) Then

otask.StartProcessing()

end if
HTH

Michel Posseth [MCP]





"Noone" <No**@none.comschreef in bericht
news:uo********************************@4ax.com. ..
Sorry, not invoke, I meant Interop. I think... Heeelp! : )

On Wed, 31 Jan 2007 19:45:41 GMT, Noone <No**@none.comwrote:

Hello all,

Ok, I want to create a program that will load plugins (dll's) from a
plugin folder. I can create the forms and put them into a dll but I
cannot actually add them dynamically at run time. I have tried to
use
the LoadLibrary and GetProc functions, which sort of worked. I got
the pointer to the function but I cannot actually RUN the function
like I can in C++. I have heard some things about Invoking(?) I
believe but I cannot find enough about it. Any comments or
suggestions would be EXTREMELY helpful.

Thanks,

Josh


Feb 2 '07 #8
Hi Noone ,

Thanks for your feedback.

Yes, you may define several methods on this interface, which set
corresponding properties/methods. The below articles talks about this topic
to much deeper level:
"Using reflection to extend .NET programs"
http://www.codeproject.com/csharp/reflection.asp
"Dodge Common Performance Pitfalls to Craft Speedy Applications"
http://msdn.microsoft.com/msdnmag/is...n/default.aspx
"Let Users Add Functionality to Your .NET Applications with Macros and
Plug-Ins"
http://msdn.microsoft.com/msdnmag/is...s/default.aspx

Hope this helps.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscripti...ult.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscripti...t/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
Feb 2 '07 #9
Absolutely amazing! Thank you so very much for all of your help.
Those links are exactly what I was looking for. It is amazing that
dotnet makes it so very easy to do run time binding so easy.

THANKS!!!

On Fri, 02 Feb 2007 08:55:19 GMT, je***@online.microsoft.com ("Jeffrey
Tan[MSFT]") wrote:
>Hi Noone ,

Thanks for your feedback.

Yes, you may define several methods on this interface, which set
corresponding properties/methods. The below articles talks about this topic
to much deeper level:
"Using reflection to extend .NET programs"
http://www.codeproject.com/csharp/reflection.asp
"Dodge Common Performance Pitfalls to Craft Speedy Applications"
http://msdn.microsoft.com/msdnmag/is...n/default.aspx
"Let Users Add Functionality to Your .NET Applications with Macros and
Plug-Ins"
http://msdn.microsoft.com/msdnmag/is...s/default.aspx

Hope this helps.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
================================================= =
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscripti...ult.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscripti...t/default.aspx.
================================================= =
This posting is provided "AS IS" with no warranties, and confers no rights.
Feb 3 '07 #10
I really must be missing something. I have been looking through a lot
of the links provided in this post so I am starting to learn what I am
doing. However, I am still a bit confused..

Ok, I have a main program that loads dlls (which I got working). It
loads the dll and finds a form in the dll. I can even form1.show()
it. My question is, (and it may be quite... facinating... at 1 in the
morning) how can I get information to the main program using
properties from the dll when I don't know what the dll information
will hold?

Let me try again. I am not sure I am explaining myself correctly.

In the main application I have:

Dim extAssembly As System.Reflection.Assembly =
System.Reflection.Assembly.LoadFrom("c:\test.dll")
Dim extForm As Form = extAssembly.CreateInstance("test.entry",
True)
Me.AddOwnedForm(extForm)
extForm.Show()

Now how can I get information from the dll, as in it's name,
description, etc. when I can only use predefined functions like
Show(), etc? Basically how do I implement properties, methods, and
events that I can access from the main program?

See...? I am really missing something. And I know it is going to be
quite obvious too.... hehe.

Thanks for your help all!

-Josh

On Fri, 2 Feb 2007 07:16:09 +0100, "Michel Posseth [MCP]"
<MS**@posseth.comwrote:
>Btw, for the previous post, it is a vb.net dll. Aka mananged, I
believe....? (can you tell I am a bit new to this?)

yes this technique will only work on managed assemblys ( exe or dll )
>I do have one question though. The
"YourObject" is a form and is limited to the form methods. How can I
send information and and forth from the main program to the external
dll?

Wel implement propertys , methods , events in your interface and start
comunicating :-)
i thought this is the easiest way , however it is possible to send
parameters to the constructor ( in the CreateInstance method )
however i didn`t bother as i comunicate through my interface with the object
( send parameters through properties, or methods , receive messages back
through events )

regards

Michel


"Noone" <No**@none.comschreef in bericht
news:p4********************************@4ax.com.. .
>Hah... Luckily it is looking like I am doing something right. With
further research that is exactly the way I went. I found I could load
a form exactly how you did it. I do have one question though. The
"YourObject" is a form and is limited to the form methods. How can I
send information and and forth from the main program to the external
dll? Any ideas? Right now I am limited to form.show, form.height,
etc etc. Nothing that I create...

Thanks!

Btw, for the previous post, it is a vb.net dll. Aka mananged, I
believe....? (can you tell I am a bit new to this?)

On Thu, 1 Feb 2007 06:37:01 -0800, Michel Posseth [MCP]
<Mi**************@discussions.microsoft.comwrot e:
>>>Hello Noone

The concept is pretty simple

1. create a generic interface and compile this to a dll
2. create your plugin and implement the interface in the class you want to
start from the outside

3. create a application and set a reference to the interface dll

now you do

Dim objAssembly As Reflection.Assembly
objAssembly = Reflection.Assembly.LoadFrom(FullPathToAssemblyDll OrExe)

Dim YourObject as Yourinterface =
DirectCast(objAssembly.CreateInstance(Namespace .YourClassToInvoke),
Yourinterface)

Note :
Namespace.YourClassToInvoke ( namespace defaults to the assembly name
but
can be set under project , properties , application , root namespace )

And that`s it !! :-)

YourObject is now initiated and can be controled from your code with the
interface that you provided

if You need anny more help feel free to ask ( i can create a small demo
for
you and upload it to my server for you to download )
Regards

Michel Posseth

"Noone" wrote:

Thank you very much for the post but I have no idea what you are
doing. I have never worked with any of the "Reflection" classes. I
am a bit newer to VB.net so I think I am missing something. Can you
explain what is going on in more detail and less Dutch? hehe... : )

Thanks,

Josh

On Wed, 31 Jan 2007 21:15:08 +0100, "Michel Posseth [MCP]"
<MS**@posseth.comwrote:

Well i did this with an interface

here is my reallife code from a wotking project ( sorry comments are
for my
co workers and they are Dutch )

'--------------------------------------------------------------------------------------

'---

'--- clsGetObjectFromFile

'---

'--- Purpose : start returns an initiated IiQueuObject

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 14-11-2006

'--- Revissions : 21-11-2006 : AssPath ingebouwd voor flexibiliteid

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Imports System.IO

Public Class clsGetObjectFromFile

''' <summary>

''' Laad een object by zijn assembly naam en class naam

''' het te laden object moet een IiQueuObject interface bezitten

''' </summary>

''' <param name="vstrAssemblyName">Name of the VSTR assembly.</param>

''' <param name="vstrClassName">Name of the VSTR class.</param>

''' <returns></returns>

Public Shared Function LoadMeByName(ByVal vstrAssemblyName As String, _

ByVal vstrClassName As String) As ista.IiQueuObject

'<21-11-2006 MP>

If vstrAssemblyName.StartsWith("[AssPath]") Then

Dim appath As String =
System.Reflection.Assembly.GetExecutingAssembly .Location

vstrAssemblyName = vstrAssemblyName.Replace("[AssPath]", "")

vstrAssemblyName = Path.Combine(appath, vstrAssemblyName)

End If

'</21-11-2006 MP>

Dim objAssembly As Reflection.Assembly

If Not My.Computer.FileSystem.FileExists(vstrAssemblyName ) Then

ServMain.WriteLogentry("Assembly niet aanwezig : " & vstrAssemblyName,
EventLogEntryType.Error)

'de assembly is niet aanwezig op deze lokatie

Return Nothing

End If

objAssembly = Reflection.Assembly.LoadFrom(vstrAssemblyName)

'voer een cast uit naar ista.IiQueuObject interface

Try

LoadMeByName = DirectCast(objAssembly.CreateInstance(vstrClassNam e),
ista.IiQueuObject)

Catch ex As Exception

ServMain.WriteLogentry("Assembly bezit niet de juiste interface : " &
vstrAssemblyName, EventLogEntryType.Error)

Return Nothing

End Try

If LoadMeByName Is Nothing Then

Dim msg As String

msg = "Assembly : " & vstrAssemblyName & Environment.NewLine & _

"Type : " & vstrClassName & " is niet gestart om onduidelijke reden"

ServMain.WriteLogentry(msg, EventLogEntryType.Error)

'geen error gewoon niets terug geven

'wanneer we dus iets anders hebben als een Nothing pointer

'dan hebben we een geinitialiseerd object

Return Nothing

End If

End Function

End Class

here is my generic interface

'--------------------------------------------------------------------------------------

'---

'--- Purpose : Provide an generic interface for the Queu

'---

'--- Made by : Michel Posseth [MCP]

'--- Date : 20-11-2006

'--- Revissions :

'---

'--- Remarks : Do not break the interface signature !!

'--- you may extend but never remove property`s or methods

'---

'--------------------------------------------------------------------------------------

Option Strict On

Option Explicit On

Public Interface IiQueuObject

Sub StartProcessing()

Property Parameters() As String

Property ProcessId() As String

Event eFinished(ByVal ProcessId As String, ByVal msg As String)

Event eError(ByVal ProcessId As String, ByVal msg As String)

Event eProcessCancelled(ByVal ProcessId As String, ByVal msg As String)

Property CancellProcess() As Boolean

End Interface

now i can just use anny object like this

'het object welke we gaan starten

'OTask wordt gedefinieerd as ista.IiQueuObject

'we kunnen dus ieder mogelijk object opstarten indien het deze
interface
heeft geimplementeerd

Dim oTask As ista.IiQueuObject =
clsGetObjectFromFile.LoadMeByName(Dr.Item("Asse mblyNaam").ToString,
Dr.Item("AssemblyType").ToString)

If Not IsNothing(oTask) Then

otask.StartProcessing()

end if
HTH

Michel Posseth [MCP]





"Noone" <No**@none.comschreef in bericht
news:uo********************************@4ax.com ...
Sorry, not invoke, I meant Interop. I think... Heeelp! : )

On Wed, 31 Jan 2007 19:45:41 GMT, Noone <No**@none.comwrote:

>Hello all,
>
>Ok, I want to create a program that will load plugins (dll's) from a
>plugin folder. I can create the forms and put them into a dll but I
>cannot actually add them dynamically at run time. I have tried to
>use
>the LoadLibrary and GetProc functions, which sort of worked. I got
>the pointer to the function but I cannot actually RUN the function
>like I can in C++. I have heard some things about Invoking(?) I
>believe but I cannot find enough about it. Any comments or
>suggestions would be EXTREMELY helpful.
>
>Thanks,
>
Josh

Feb 3 '07 #11
Breakthrough!!!

Ok, I am getting it. I can call the .InvokeMember function to call
external functions from the dll. That is what I was looking for.
PLEASE feel free to give me any comments or suggestions. Slight
breakthrough.... Need any advice you have. : )

Thanks,

Josh
Feb 3 '07 #12
Hi Josh,

Thanks for your feedback.

I am not sure I understand you completely. Do you mean Type.InvokeMember
method meet your need? However, how do you use Type.InvokeMember method to
call the external function(I assume external function means the methods
from the Exe modules) from the dll?

Based on my understanding, in the Exe main application, you may use
Assembly.Load/LoadFrom to obtain the assembly reference, then you got the
form reference through Assembly.CreateInstance. You may use
Assembly.GetType method to get the type reference of the "form" in the
assembly dll, and then use Type.InvokeMember() method to invoke any member
methods of the "form". Note, you should pass the original "form" object
reference as one parameter of Type.InvokeMember() method. Please search
"Type.InvokeMember" in MSDN. The MSDN for "Type.InvokeMember" contains some
sample code of using it. Also, the article below's "Dynamic Invocation with
Type.InvokeMember()" section may be informative to you:
http://www.codeproject.com/csharp/IntroReflection.asp

If you still have anything unclear or need any help, please feel free to
tell me, thanks.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscripti...ult.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscripti...t/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.

Feb 5 '07 #13
Hello Josh,

Have you got any further progress on this? If you still have any questions,
please feel free to post here.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead
This posting is provided "AS IS" with no warranties, and confers no rights.
Feb 9 '07 #14
Hi Josh,

Have you reviewed my last reply to you? Does it make sense to you? If you
still need any help or have any concern, please feel free to tell me,
thanks.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscripti...ult.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscripti...t/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
Feb 13 '07 #15

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Kevin Burton | last post by:
I am trying to use managed C++ but I am getting the following link errors: Metadata file 'D:\Projects\Visa\AddressVerification\AddressVerificat...
2
by: | last post by:
Help! I'm new to c++, and am breaking my teeth on MS Visual C++ (bundled within Visual Studio .NET 2003). Am trying to link simple c++ code to fortran dlls created in Compaq Visual Fortran (v6.1)....
7
by: wmkew | last post by:
Hello everyone I'm encountering a R6002 Runtime error and several bugs when trying to generate a simple Managed C++ application with .NET 2003. The main problem seems to arise from linking with...
3
by: rich | last post by:
Hi there, I've been working with dynamic libraries for a quite big software and now and then I may get some weird linking errors, like following MSVCRTD.lib(MSVCR71D.dll) : error LNK2005:...
10
by: Julian | last post by:
I get the following error when i try to link a fortran library to a c++ code in .NET 2005. LINK : fatal error LNK1104: cannot open file 'libc.lib' the code was working fine when built using...
5
by: news.microsoft.com | last post by:
We have recently upgraded from VS2002 to VS2005 and I'm having a problem with the linker always performing a full link even though nothing has changed. In searching the newsgroups I found that I...
0
by: xieml2007 | last post by:
Dear Madam or Sir, I encountered one problem which is quite similiar to the discussions launched at the web site: http://www.thescripts.com/forum/thread280324.html
1
by: abhijit patra | last post by:
Explicit linking of DLL occurs at the run time- it is true. But when implicit linking occurs? is it occurs in compile time.. ? Is there any body to explain me..... please.....?
0
by: Fred | last post by:
Is there is a better newsgroup for this question? I am having a problem linking assemblies into one using Dotfuscator Pro 4.0. The problem occurs when linking the following into one exe:...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.