Hi all,
In brief:
Attempting a minimal Windows Presentation Foundation application using the RDNZL 0.13.3 tarball and LispWorks Personal 5.1.1 resulted in a "The calling thread must be STA" error. Using a copy of rdnzl.dll built in Visual Studio C++ 2010 Express eliminated the error. Does rdnzl.tar.gz contain an old(er) build of rdnzl.dll, or is there something else at work?
In detail:
After appropriate calls to "import-assembly", "use-namespace", etc., I tried the following, and got the subsequent error:
RDNZL-USER 9 > (let* ((win (new "Window")) (app (new "Application"))) (setf [%Height win] 300) (setf [%Width win] 300) [Run app win])
Error: .NET error (System.InvalidOperationException): The calling thread must be STA, because many UI components require this. 1 (abort) Return to level 0. 2 Return to top loop level 0.
Type :b for backtrace, :c <option number> to proceed, or :? for other options
I downloaded the current rdnzl-cpp tarball, and grepped for threading, finding
RDNZL\RDNZL.vcxproj: <CLRThreadAttribute>STAThreadingAttribute</CLRThreadAttribute> RDNZL\Stdafx.cpp: System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
Having no idea how to go about debugging the problem directly, I took a shot in the dark and built the DLL in Visual Studio C++ 2010 Express. It built fine. I replaced the existing rdnzl.dll and tried again: it worked perfectly!
Let me know if I can provide any additional details.
Thanks,
Walter
Hi Walter,
The STA line you're seeing in the source code is from version 0.5.1 of the C++ source, i.e. from 2006. The DLL delivered with RDNZL should definitely be current. I have no idea why it should be necessary to recompile it, but I'm not familiar with any recent .NET changes. Maybe somebody else on the list is?
Also, I'm still running XP and my VS is from 2004... :)
Edi.
On Mon, Sep 6, 2010 at 5:55 AM, Walter GR waltergr@aol.com wrote:
Hi all,
In brief:
Attempting a minimal Windows Presentation Foundation application using the RDNZL 0.13.3 tarball and LispWorks Personal 5.1.1 resulted in a "The calling thread must be STA" error. Using a copy of rdnzl.dll built in Visual Studio C++ 2010 Express eliminated the error. Does rdnzl.tar.gz contain an old(er) build of rdnzl.dll, or is there something else at work?
In detail:
After appropriate calls to "import-assembly", "use-namespace", etc., I tried the following, and got the subsequent error:
RDNZL-USER 9 > (let* ((win (new "Window")) (app (new "Application"))) (setf [%Height win] 300) (setf [%Width win] 300) [Run app win])
Error: .NET error (System.InvalidOperationException): The calling thread must be STA, because many UI components require this. 1 (abort) Return to level 0. 2 Return to top loop level 0.
Type :b for backtrace, :c <option number> to proceed, or :? for other options
I downloaded the current rdnzl-cpp tarball, and grepped for threading, finding
RDNZL\RDNZL.vcxproj: <CLRThreadAttribute>STAThreadingAttribute</CLRThreadAttribute> RDNZL\Stdafx.cpp: System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
Having no idea how to go about debugging the problem directly, I took a shot in the dark and built the DLL in Visual Studio C++ 2010 Express. It built fine. I replaced the existing rdnzl.dll and tried again: it worked perfectly!
Let me know if I can provide any additional details.
Thanks,
Walter
rdnzl-devel mailing list rdnzl-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/rdnzl-devel