Hello,
I am trying to experiment with the beta OpenCL SDK calling OpenCL from a C# .NET managed application.
Any call to the OpenCL API causes a memory access violation exception, both when calling OpenCL directly from C# or when creating a native dll and calling the OpenCL API from a function in the native dll.
I added a C# console application project to your OpenCLSamplesVS solution and created manual bindings to the OpenCL dll, the result is always a memory exception reading location 0x00000000.
Cheers,
Frio
It seems you are not able to call any c/c++ dll from c#.
I guess calling conventions could be a issue.
I am using a number of additional C++ dlls without a single problem.
As I said, even calling the OpenCL API from within a C/C++ function in the C++ native dll (invoked by C#) it still causes the access violation; the code executes just fine up to the OpenCL API call, then crash...
Any other call to any other C/C++ dll functions works perfectly.
Frio
Frio,
I am able to call OpenCL API function from c/c++ dll(called by c++).
what i have done
1. created clib.dll which contain one function which is calling OpenCL API
2. created c++ application which calls function defined clib.dll
hi genaganna,
thanks for your comments, perhaps I haven't explained myself correctly.
This is the situation:
I have a C# (.NET managed) application.
I want to call OpenCL API functions from the C# application.
This is what I tried:
1) I tried to call the OpenCL API directly from C# and a memory access violation occurs.
2) I created a C++ dll (OpenCLSupport.dll) which contains one function which calls OpenCL API; then I called the function in OpenCLSupport.dll from C# and the same memory access violation occurs.
I need to use OpenCL API from C# and any attempts I have made result in the same memory access violation, I suspect there might be a problem, could you please investigate?
Cheers,
Frio
Could you post the code?
Here is a snippet, it doesn't do anything useful, but the equivalent C++ code doesn't crash.
My program is obviously different, but calling ANY OpenCL API results in the same memory access violation.
Frio
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication1 { unsafe class Program { [DllImport("OpenCL")] static extern int clReleaseMemObject(IntPtr a); static void Main(string[] args) { clReleaseMemObject(IntPtr.Zero); } } }
Which OS are you using?
Windows XP Professional SP3 32-bit
Thanks.
This is a known problem with WindowXP and it has to do with our use of declspec and TLS. This is being tracked internally and will be fixed in an up and comming update.
Ok, thanks.
Any clue about when the update is going to be released?
Cheers,
Frio
Just a small FYI: There are several open source C# bindings available at this point. While they probably won't help you with the XP issue, at least they can save you quite a bit of mindnumbingly boring work.
http://sourceforge.net/projects/openclnet/develop
http://www.opentk.com/
Originally posted by: brg Thanks.
This is a known problem with WindowXP and it has to do with our use of declspec and TLS. This is being tracked internally and will be fixed in an up and comming update.
Is there any update on this issue? It is blocking our .Net bindings (http://www.opentk.com).
I am seeing this on the Vista version of the SDK (2.0 beta 2 and beta 3). The Linux version is working correctly.
I get the same error message if I try to use OpenCL.dll from a Delphi GUI (windowed) application. It seems it is because OpenCL.dll tries to write the silly expiry message to the stderr (or stdout). Hence if you write a console application in Windows, you can use the current OpenCL.dll made by AMD/ATI. But if you make a GUI application, you can only use nVIDIA's OpenCL solution properly -- which doesn't print anything to the stderr or stdout.
Frio, TheFiddler, fiery,
Is this issue resolved with the 2.0 SDK?