Hi all.
I have posted an early version of my Room Modes program on my website. Please try it out and report your success or failure here so that I can work out the bugs of posting a complex Web App.
(Mods: This program is for LFs only and you may be tempted to move it to "subwoofers", but I beg you not to. I only post in this Forum because, to me, subs are just as much a part of a "full" sound system as any other part of the system is. Many people will not see this thread if it is moved - I wouldn't.)
I have posted an early version of my Room Modes program on my website. Please try it out and report your success or failure here so that I can work out the bugs of posting a complex Web App.
(Mods: This program is for LFs only and you may be tempted to move it to "subwoofers", but I beg you not to. I only post in this Forum because, to me, subs are just as much a part of a "full" sound system as any other part of the system is. Many people will not see this thread if it is moved - I wouldn't.)
Doesn't work here.
The following properties have been set:
Property: [AdminUser] = true {boolean}
Property: [InstallMode] = HomeSite {string}
Property: [ProcessorArchitecture] = AMD64 {string}
Property: [VersionNT] = 6.1.1 {version}
Running checks for package 'Windows Installer 3.1', phase BuildList
The following properties have been set for package 'Windows Installer 3.1':
Running checks for command 'WindowsInstaller3_1\WindowsInstaller-KB893803-v2-x86.exe'
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsi' and value '3.1': true
Result of checks for command 'WindowsInstaller3_1\WindowsInstaller-KB893803-v2-x86.exe' is 'Bypass'
'Windows Installer 3.1' RunCheck result: No Install Needed
Running checks for package 'Microsoft .NET Framework 4 Client Profile (x86 and x64)', phase BuildList
Reading value 'Version' of registry key 'HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client'
Read string value '4.5.50938'
Setting value '4.5.50938 {string}' for property 'DotNet40Client_TargetVersion'
The following properties have been set for package 'Microsoft .NET Framework 4 Client Profile (x86 and x64)':
Property: [DotNet40Client_TargetVersion] = 4.5.50938 {string}
Running checks for command 'DotNetFX40Client\dotNetFx40_Client_x86_x64.exe'
Result of running operator 'ValueEqualTo' on property 'InstallMode' and value 'HomeSite': true
Result of checks for command 'DotNetFX40Client\dotNetFx40_Client_x86_x64.exe' is 'Bypass'
Running checks for command 'DotNetFX40Client\dotNetFx40_Client_setup.exe'
Result of running operator 'ValueNotEqualTo' on property 'InstallMode' and value 'HomeSite': false
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'DotNet40Client_TargetVersion' and value '4.0.30129': true
Result of checks for command 'DotNetFX40Client\dotNetFx40_Client_setup.exe' is 'Bypass'
'Microsoft .NET Framework 4 Client Profile (x86 and x64)' RunCheck result: No Install Needed
Launching Application.
URLDownloadToCacheFile failed with HRESULT '-2146697210'
Error: An error occurred trying to download 'http://www.gedlee.com/Modes.application'.
Everything but the last line is expected, but the last line is curious. The application is not at that location. I wonder why it thinks that it is.
Any experts at Visual Studio and Web publishing out there? The "wizard" does not seem to work properly.
I get further however I receive an error which suggests that you have an absolute path to a dll file on your computer hard coded rather than a relative path or one using an environment variable for a prefix:
This was on Windows 7 Professional 64 bit with Internet Explorer 9.
An externally hosted image should be here but it was not working when we last tested it.
This was on Windows 7 Professional 64 bit with Internet Explorer 9.
Code:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.DllNotFoundException: Unable to load DLL 'C:\Users\Earl\SkyDrive Pro\Projects\Modes\ModesCalc\Debug\ModesCalc.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
at Modes.numerical.CalcK(Double aNum, Double aReal, Int32& aInt, Double[] aReal)
at Modes.numerical.SetupFreqs()
at Modes.main.main_Shown(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnShown(EventArgs e)
at System.Windows.Forms.Form.CallShownEvent()
at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
at System.Windows.Forms.Control.InvokeMarshaledCallbacks()
************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
Modes
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/SByrnand/AppData/Local/Apps/2.0/GDT096VL.RN5/30DNQCE9.YP9/mode..tion_317b707a93ea3a48_0001.0000_05d1d077ad6cf44d/Modes.exe
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 10.0.0.0
Win32 Version: 11.0.50938.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Runtime.Remoting
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
Last edited:
Simon
This is the crux of the problem. In the VB.Net code you can only use a hardcoded path to a DLL in the Declare statement, relative paths are not allowed. The Publishing Wizard in Visual Studio does not post multiple projects to the web, only one. This means that a DLL that is made as part of the "solution" does not automatically get included.
I need to find a way to post the DLL to somewhere that can be accessed from anywhere. It would seem like I should be able to do this on my own website, but that does not seem to work. Still investigating.
This is the crux of the problem. In the VB.Net code you can only use a hardcoded path to a DLL in the Declare statement, relative paths are not allowed. The Publishing Wizard in Visual Studio does not post multiple projects to the web, only one. This means that a DLL that is made as part of the "solution" does not automatically get included.
I need to find a way to post the DLL to somewhere that can be accessed from anywhere. It would seem like I should be able to do this on my own website, but that does not seem to work. Still investigating.
Kindhornman
I can and will post the DLLs and you can try and find out where to put them. But I am not sure that this will work any better. The DLLs have to be declared either with a hard coded path or no path. No path is the usual and the DLL is then placed into the applications folder. But with a web installed app where is that folder?
See the web software works for me everytime no matter how I code the declare statement, but I never know which location of the DLL the software is finding. But on my system it always seems to find it. I might post the DLLs to a share driver on my Office 365 account, but that's not a clean solution.
I can and will post the DLLs and you can try and find out where to put them. But I am not sure that this will work any better. The DLLs have to be declared either with a hard coded path or no path. No path is the usual and the DLL is then placed into the applications folder. But with a web installed app where is that folder?
See the web software works for me everytime no matter how I code the declare statement, but I never know which location of the DLL the software is finding. But on my system it always seems to find it. I might post the DLLs to a share driver on my Office 365 account, but that's not a clean solution.
See the web software works for me everytime no matter how I code the declare statement, but I never know which location of the DLL the software is finding. But on my system it always seems to find it. I might post the DLLs to a share driver on my Office 365 account, but that's not a clean solution.
Rename all others it shouldn't be reading one by one.
Its not reading them "one by one", but which one is not obvious. Of course just moving all but one at a time would isolate the one being used, but let's see how things progress.
Rename each instance one by one until it no longer functions properly. The one that causes the program to work for you isn't where it should be on our end. So when you rename the file that is working on yours fails this informs you which it is actually reading. Knowing what this difference is could be the root cause of the problem.
Is there some reason this application has to be built as a "web app" ? Can it not just be built as a normal stand alone downloadable executable ? (Including a bundled copy of the dll in the same directory as the executable, where it will automatically find it)
At the end of the day the application is having to be downloaded one way or the other, the way you're doing it is unnecessarily convoluted, and having it only work with IE is going to alienate a lot of the potential audience for the app as most techy people avoid IE like the plague... 😉
At the end of the day the application is having to be downloaded one way or the other, the way you're doing it is unnecessarily convoluted, and having it only work with IE is going to alienate a lot of the potential audience for the app as most techy people avoid IE like the plague... 😉
Last edited:
Some further suggestions:
I assume the exe has the user interface and the main calculations are done in the dll ? I'll also assume that the exe and dll are being built as part of the same visual studio project ?
If so there should be a couple of different things you can do. (I'm not that familiar with visual studio, but I do have some programming experience on other platforms)
Set the build location of the dll and exe to be in the same directory, and in your code import the dll by name only not with a hard coded path. When executed windows will check both the current working directory and the directory the exe resides in (typically both the same if you double click in explorer to launch) before windows paths, so will have no trouble finding the dll if it is in the same folder.
Then simply zip the exe, dll file and a readme up together and put the zip file on your website for download. Anyone with any browser can download and unzip it to run it, not just those using IE. A stand alone app on the users PC is far more convenient for a tool like this that is likely to be called upon again and again. (I know I would use it frequently)
This is the defacto standard way of distributing a small utility that isn't big enough to warrant an installer. (You could build an msi installer package if you want but that's more work for no real gain for an app this size)
A second choice is to static link the dll file in your project - if you do this, at linking time the linker will export all the functions your app uses from the dll and build them into the executable file so that no separate dll will need to be distributed to the user end. (effectively the dll is built into the exe, but only the parts of it that are actually called upon, including internal dependencies)
This is sometimes done with libraries like zlib or crypto libraries where you want to be absolutely certain you will always have the library you need present and have the version you need and expect regardless of what the user might have on the system.
In the case where both exe and dll are your own code, created in the same visual studio project and the dll is only built specifically to be used with that exe it makes perfect sense to static link it. (Even if they're separate visual studio projects there is still a way to static link it, although you would need to remember to rebuild the exe project each time the dll project was rebuilt in that case, whereas if they're one project its automatic)
A single exe which is statically linked could be distributed using your "web app" technique or just be zipped up with a readme file.
I assume the exe has the user interface and the main calculations are done in the dll ? I'll also assume that the exe and dll are being built as part of the same visual studio project ?
If so there should be a couple of different things you can do. (I'm not that familiar with visual studio, but I do have some programming experience on other platforms)
Set the build location of the dll and exe to be in the same directory, and in your code import the dll by name only not with a hard coded path. When executed windows will check both the current working directory and the directory the exe resides in (typically both the same if you double click in explorer to launch) before windows paths, so will have no trouble finding the dll if it is in the same folder.
Then simply zip the exe, dll file and a readme up together and put the zip file on your website for download. Anyone with any browser can download and unzip it to run it, not just those using IE. A stand alone app on the users PC is far more convenient for a tool like this that is likely to be called upon again and again. (I know I would use it frequently)
This is the defacto standard way of distributing a small utility that isn't big enough to warrant an installer. (You could build an msi installer package if you want but that's more work for no real gain for an app this size)
A second choice is to static link the dll file in your project - if you do this, at linking time the linker will export all the functions your app uses from the dll and build them into the executable file so that no separate dll will need to be distributed to the user end. (effectively the dll is built into the exe, but only the parts of it that are actually called upon, including internal dependencies)
This is sometimes done with libraries like zlib or crypto libraries where you want to be absolutely certain you will always have the library you need present and have the version you need and expect regardless of what the user might have on the system.
In the case where both exe and dll are your own code, created in the same visual studio project and the dll is only built specifically to be used with that exe it makes perfect sense to static link it. (Even if they're separate visual studio projects there is still a way to static link it, although you would need to remember to rebuild the exe project each time the dll project was rebuilt in that case, whereas if they're one project its automatic)
A single exe which is statically linked could be distributed using your "web app" technique or just be zipped up with a readme file.
Last edited:
Simon
The reason that I only do a web app is because this is the only way that I can control the app and prevent rampant distribution out of my hands. Hence it will either be a web app or no app.
Static linking is not an option since the DLL and Exe are in two different languages and use two different linkers.
So thanks for the recommendations, but they don't work for me. We need to either find a way to do this on my website or I'll just keep it for my own use.
The reason that I only do a web app is because this is the only way that I can control the app and prevent rampant distribution out of my hands. Hence it will either be a web app or no app.
Static linking is not an option since the DLL and Exe are in two different languages and use two different linkers.
So thanks for the recommendations, but they don't work for me. We need to either find a way to do this on my website or I'll just keep it for my own use.
Some more digging disclosed that the Visual Studio wizard overwrites some previous software installs making the setup not able to sort out what which "setup" is which. I will have to manually find a way around this.
Does anyone know how I could post the DLL on my website and hard code its URL in my software. By this I don't mean how to do it in my code, I know that, but how to I place a file in my web that has the ability to be run by a user client? When I tried this I get an error saying that the file could be found but the directory was locked except through a login. How does one post a file that is "open" and not "hidden"? I think this would resolve the problem.
I also fixed the code so that the DLL could be downloaded separately and if it is placed into some directory on the clients computer and registered with it should be visible.
Does anyone know how I could post the DLL on my website and hard code its URL in my software. By this I don't mean how to do it in my code, I know that, but how to I place a file in my web that has the ability to be run by a user client? When I tried this I get an error saying that the file could be found but the directory was locked except through a login. How does one post a file that is "open" and not "hidden"? I think this would resolve the problem.
I also fixed the code so that the DLL could be downloaded separately and if it is placed into some directory on the clients computer and registered with it should be visible.
Eral,
before you spend too much time on it, does your software do anything Room Sim in REW can't do?
before you spend too much time on it, does your software do anything Room Sim in REW can't do?
I know for a fact that REW can't do anything that I want it to because I didn't write it. My software can do anything that I want it to. Its just like measurement software. A lot of it is fine, but none of it does everything that I wanted, so I wrote my own. Now I only use my own because none of the other stuff is as good.
At any rate, I don't know what REW can do so I can't answer your question. But here is one for you: Can REW calculate the frequency and spatial variance of the sound field with four subs at arbitrary positions in 3 dimensions integrated with a main speaker, all with real frequency responses and oh yea, do it in real time, i.e. move a sub by dragging it and the statistics and frequency response of the total updates instantly? Mine can.
PS. Makrus, It's Earl not Eral
At any rate, I don't know what REW can do so I can't answer your question. But here is one for you: Can REW calculate the frequency and spatial variance of the sound field with four subs at arbitrary positions in 3 dimensions integrated with a main speaker, all with real frequency responses and oh yea, do it in real time, i.e. move a sub by dragging it and the statistics and frequency response of the total updates instantly? Mine can.
PS. Makrus, It's Earl not Eral
Last edited:
Elar,
REW can do that but it can't load real frequency responses. Did you test how good simulation and reality match?
REW can do that but it can't load real frequency responses. Did you test how good simulation and reality match?
I looked at the REW website and they don't describe anything like what you state. Am I missing something or are you just being Makrus again?
- Status
- Not open for further replies.
- Home
- General Interest
- Room Acoustics & Mods
- Room Modal Response