mmsajid
11th December 2008 09:29 UTC
calling a simple .net dll
Hi all,
Iam trying to call a .net dll in NSIS script below is the code.
------------------------------------------------------
outFile "NewTest.exe"
section
File "MathLib.dll"
File "CLR.dll"
System::Call $0 'CLR::Cal('MathLib.dll::MathLib::MClass::add(12,8)')'
Messagebox mb_ok $0
SectionEnd
------------------------------------------------------
and the class library code is
------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
namespace MathLib
{
public class MClass
{
public int add(int a, int b)
{
return (a + b);
}
}
}
------------------------------------------------------
When I try to execute the NSIS script, it runs but nothing is been returned.
What is that Iam missing in the NSIS script.
Any help is appreciated.
kichik
11th December 2008 20:36 UTC
That syntax seems outdated. The one on the Wiki page is completely different and CLR is called directly without the System plug-in.
http://nsis.sourceforge.net/Call_.NE...ethods_plug-in
mmsajid
12th December 2008 11:23 UTC
Thanks Kichik.
I tried the below code.
;-------------------------------------------
section
InitPluginsDir
SetOutPath $PLUGINSDIR
File "MathLib.dll"
File "CLR.dll"
CLR::Call /NOUNLOAD "MathLib.dll" "MathLib.MClass" "add" 5 10
pop $0
MessageBox MB_OK $0
CLR::Destroy
sectionend
;-------------------------------------------
I tried as per your suggestion but compiler gives the below error.
Invalid command : CLR::Call
Thanks for looking in to it.
kichik
12th December 2008 11:25 UTC
That's because you haven't properly installed the CLR plug-in. Put the DLL in your plug-ins directory.
mmsajid
12th December 2008 11:49 UTC
Excellent. Thanks Kichik.
Iam can able to call the .net dll by copying the CLR.dll in to the plugins directory and with a little change to the code line where we call.
CLR::Call /NOUNLOAD "MathLib.dll" "MathLib.MClass" "add" 2 5 10
I was missing 2 in my statement which is required to tell the compiler that call to dll has 2 parameters.
Thanks Again.... :-)
mmsajid
12th December 2008 14:30 UTC
Hi Kichick,
Is there a way to call a property as well.
CLR::Call /NOUNLOAD "MathLib.dll" "MathLib.MClass" "Name" 0
Where "Name" is the public property in MClass.
Thanks
claesabrandt
13th January 2009 13:18 UTC
Currently you can call properties by using the get_ and set_ notation. If your property is called MyProperty, you can set it's value with set_MyProperty and you can get it's value with get_MyProperty.
Example getting a property value:
CLR
::Call /NOUNLOAD SomeAssembly.dll SomeNamespace.SomeClass get_MyProperty 0
pop$0
MessageBox MB_OK$0
>
Example setting a property value:
CLR::Call /NOUNLOAD SomeAssembly.dll SomeNamespace.SomeClass set_MyProperty 1 "Hello Property"
I have added this information to the wiki as well.
Regards Claes