Hi Alex,

> Just saw this thread (and the previous ones) ... unfortunately I'm at home 
> right now and the machine here is configured for gaming so theres no 
> development tools whatsoever installed. I'll be back in the office tomorrow 
> though and will give your problem a run through.
>
> The only caveat is that my dev machine is WindowsXP Pro 32bit so I may not 
> hit your problem since when I read your earlier code ... the only reason it 
> would have failed is if J.DLL wasn't registered properly which you have done 
> so correctly.
>
> Although I have been to some dev discussions at the office where they 
> mentioned the an Interopt problem when there was a deployment to a 64bit 
> machine, I'll guess I'll have to ask them how they worked around it.


Thanks, much appreciated ... I am stumped. :-).

>
> I know its a long shot but can you give JEXEServer a try instead of JDLL? I 
> believe it would still throw the same error though but its a curiosity.

Your EXE suggestion worked. In Visual Studio using EXE server works,
but using DLL does not. So I thought my problem was solved, but
alas...

The NinjaTrader C# IDE does not seem to allow references to EXE, only
to DLL! I will ask them about it on their forum. I will try to make
visual studio project to output a DLL containing a pass-through to the
J EXE, which hopefully I can call from NinjaTrader.

>
> Hmmm. I hope I don't offend you but are you using the 64bit version of J?

No offense taken, please feel free to suggest even the most basic
things. I know absolutely nothing about DLL's - apart from it appears
to be an incredibily complicated and delicate affair. I appreciate any
advice given.

Thanks,
Matthew.


>
> r/Alex
> ________________________________________
> From: [email protected] [[email protected]] 
> On Behalf Of Matthew Brand [[email protected]]
> Sent: Wednesday, December 16, 2009 12:19 AM
> To: Programming forum
> Subject: Re: [Jprogramming] C# .NET COM JDLLServer
>
> I have done some investigations (outside of NinjaTrader, just using
> Visual Studio c#). I do not know for sure, but it might be that the
> JDLLServerClass does not work on 64 bit Windows 7? I am in way over my
> head here, I have no idea what is going on - so apologies in advance
> if I am wrong.
>
> I read this:
> http://blogs.msdn.com/mshneer/archive/2009/12/07/interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead.aspx
>
> So I removed the "Class" prefix from "JDLLServerClass" to end up with
> a program that looks like this:
>
> using System;
> using System.Collections.Generic;
> using System.Linq;
> using System.Text;
> using JDLLServerLib;
> using JEXEServerLib;
>
> namespace ConsoleApplication1
> {
>    class Program
>    {
>        static void Main(string[] args)
>        {
>           //  JDLLServerClass j = new JDLLServerClass();
>            JDLLServer j = new JDLLServer();
>            object result;
>            int status = j.DoR("2| !/~i.4", out result);
>            string.Format("J DoR ended with status {0} and
> result\n{1}", status, result);
>
>        }
>    }
> }
>
>
> But now I get a different error:
>
> System.Runtime.InteropServices.COMException was unhandled
>  Message=Retrieving the COM class factory for component with CLSID
> {21EB05EA-1AB3-11CF-A2AC-8FF70874C460} failed due to the following
> error: 80040154 Class not registered (Exception from HRESULT:
> 0x80040154 (REGDB_E_CLASSNOTREG)).
>  Source=mscorlib
>  ErrorCode=-2147221164
>  StackTrace:
>       at System.RuntimeTypeHandle.CreateInstance(RuntimeType type,
> Boolean publicOnly, Boolean noCheck, Boolean& canBeCached,
> RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
>       at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,
> Boolean skipCheckThis, Boolean fillCache)
>       at System.RuntimeType.CreateInstanceDefaultCtor(Boolean
> publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis,
> Boolean fillCache)
>       at System.Activator.CreateInstance(Type type, Boolean nonPublic)
>       at System.Activator.CreateInstance(Type type)
>       at ConsoleApplication1.Program.Main(String[] args) in
> c:\users\mtthwbrnd\documents\visual studio
> 2010\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line
> 15
>       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,
> String[] args)
>       at System.AppDomain.ExecuteAssembly(String assemblyFile,
> Evidence assemblySecurity, String[] args)
>       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
>       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
>       at System.Threading.ExecutionContext.Run(ExecutionContext
> executionContext, ContextCallback callback, Object state, Boolean
> ignoreSyncCtx)
>       at System.Threading.ExecutionContext.Run(ExecutionContext
> executionContext, ContextCallback callback, Object state)
>       at System.Threading.ThreadHelper.ThreadStart()
>  InnerException:
>
> This might be relevent?:
>
> "PROBLEM:
>
> When you run the .net Code in X64 Environment you will get the
> following error message.
>
> " Failed --Retrieving the COM class factory for component with CLSID ...."
>
> E.g. in CMS Export / Import server side .net code =
> "ExportSiteContentIncremental(...) Failed --Retrieving the COM class
> factory for component with CLSID
> {CA0752B3-021C-4F99-82E3-2C0F19C5E953} failed due to the following
> error: 80040154."
>
> WORKAROUND:
>
> The possible workaround is modify your project's platform from 'Any
> CPU' to 'X86' (in Project's Properties, Build/Platform's Target)
>
> ROOTCAUSE
>
> The VSS Interop is a managed assembly using 32-bit Framework and the
> dll contains a 32-bit COM object. If you run this COM dll in 64 bit
> environment, you will get the error message.
> "
> http://blogs.msdn.com/karthick/archive/2006/02/28/540780.aspx
>
> Only problem for me here is that my visual studio only has the "x86" option.
>
>
>
>
> 2009/12/14 Matthew Brand <[email protected]>:
>> I just got a response from the NinjaTrader supoport team on their
>> forum to asking:
>> "Best course of action would be to inquiry with the author to see if
>> they can direct you to where it needs to be dropped."
>>
>> http://www.ninjatrader-support2.com/vb/showthread.php?p=133247#post133247
>>
>> Is there a special place that the dll needs to be put?
>>
>> 2009/12/14 Matthew Brand <[email protected]>:
>>> I have added the DLL as a reference in the C# program with:
>>>
>>> right clik (in the C# IDE)->references...->add->(navigate to
>>> Interop.JDLLServerLib.dll)
>>>
>>> and have the lines:
>>>
>>> using JDLLServerLib;
>>>
>>> and
>>>
>>> JDLLServerClass j = new JDLLServerClass();
>>>
>>> in my c# program. The intellisense recognises all of the things that
>>> are inside JDLLServerClass ... which to me inidicates that the DLL
>>> file was found correctly. But when I run the program I get the error:
>>>
>>> 14/12/2009 13:02:34,Strategy,Error on calling 'OnBarUpdate' method for
>>> strategy 'JayServerExample': Could not load file or assembly
>>> 'Interop.JDLLServerLib, Version=3.0.0.0, Culture=neutral,
>>> PublicKeyToken=null' or one of its dependencies. The system cannot
>>> find the file specified.,
>>>
>>> It's a long shot becuase it is nothing to do with J, but does anybody
>>> have any ideas what I might need to do? [PS, I have only used C# since
>>> last week so really don't quite "get it" at this stage!]
>>>
>>> Thanks,
>>> Matthew.
>>>
>>>
>>> For reference, the c# program is:
>>>
>>> #region Using declarations
>>> using System;
>>> using System.ComponentModel;
>>> using System.Diagnostics;
>>> using System.Drawing;
>>> using System.Drawing.Drawing2D;
>>> using System.Xml.Serialization;
>>> using NinjaTrader.Cbi;
>>> using NinjaTrader.Data;
>>> using NinjaTrader.Indicator;
>>> using NinjaTrader.Gui.Chart;
>>> using NinjaTrader.Strategy;
>>>
>>> using JDLLServerLib;
>>>
>>> #endregion
>>>
>>> // This namespace holds all strategies and is required. Do not change it.
>>> namespace NinjaTrader.Strategy
>>> {
>>>    /// <summary>
>>>    /// Example of communcation with J
>>>    /// </summary>
>>>    [Description("Example of communcation with J")]
>>>    public class JayServerExample : Strategy
>>>    {
>>>        #region Variables
>>>        // Wizard generated variables
>>>        // User defined variables (add any user defined variables below)
>>>        #endregion
>>>
>>>        /// <summary>
>>>        /// This method is used to configure the strategy and is
>>> called once before any strategy method is called.
>>>        /// </summary>
>>>        protected override void Initialize()
>>>        {
>>>            CalculateOnBarClose = true;
>>>        }
>>>
>>>        /// <summary>
>>>        /// Called on each bar update event (incoming tick)
>>>        /// </summary>
>>>        protected override void OnBarUpdate()
>>>        {
>>>                        Print(Bars.Count);
>>>                        JDLLServerClass j = new JDLLServerClass();
>>>        }
>>>
>>>        #region Properties
>>>        #endregion
>>>    }
>>> }
>>>
>>>
>>> 2009/12/12 Matthew Brand <[email protected]>:
>>>> That did it, thanks :-).
>>>>
>>>> PS. For anyone else with this problem, if you get a domain error when
>>>> you run the command:
>>>>  wd 'exec *',BINPATH,'\jreg.bat'
>>>>
>>>> it might be that you need to run as administrator in which case execute:
>>>> BINPATH,'\jreg.bat'
>>>>
>>>> to see where the file is and go to it in windows explorer, right click
>>>> and select run as administrator.
>>>>
>>>> 2009/12/12 Dan Bron <[email protected]>:
>>>>> Matthew wrote:
>>>>>>  But the JDLLServer does not appear on the COM tab for me. Is there
>>>>>>  something I need to install first?
>>>>>
>>>>> Try running   wd 'exec *',BINPATH,'\jreg.bat'  .  Or just double-click 
>>>>> that
>>>>> batch file in Windows explorer.
>>>>>
>>>>> -Dan
>>>>>
>>>>> ----------------------------------------------------------------------
>>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>>>
>>>>
>>>
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to