-
February 21st, 2014, 07:20 AM
#1
CComPtr<T> System.AccessViolationException
Hi all,
I have a C++/CLI console application and I should pass a CComPtr<T> to a class but when I try to access it, occours a System.AccessViolationException.
Following the main code:
Code:
CComPtr<IAuga> auga;
CLSID clsAuga;
HRESULT hr = CLSIDFromProgID(L"Heimdall.Auga.1", &clsAuga);
if (hr > -1)
{
hr = CoCreateInstance(clsAuga, NULL, CLSCTX_INPROC_SERVER, __uuidof (IAuga), (void**)&auga);
if (hr > -1)
{
printf("Auga COM component created successfully!\n");
}
else
{
//error
}
}
CameraHook^ cam = gcnew CameraHook((CComPtr<IAuga>*&)auga);
cam->StartCamera();
And following the CameraHook.h and CameraHook.cpp:
Code:
ref class CameraHook
{
private:
CComPtr<IAuga> *auga;
public:
CameraHook(CComPtr<IAuga> *ag);
void StartCamera();
};
Code:
CameraHook::CameraHook(CComPtr<IAuga> *ag)
{
auga = ag;
}
void CameraHook::StartCamera()
{
HRESULT hr = auga->p->SetCameraIDispatch(........);
}
When the console reachs auga->p->SetCameraIDispatch(), it breaks.
What's the problem?
Thanks a lot!
Marco
-
February 21st, 2014, 07:50 AM
#2
Re: CComPtr<T> System.AccessViolationException
Why did you implement CameraHook as a managed class at all? I can't see any reaon for that in what you posted, and turning it into a native class may alreafy eliminate your probem, as native/managed interop can be a quite tricky thing.
Going even further, why is your console app a managed one in the first place? There may, however, be a reason for that lying outside the scope of your post.
I was thrown out of college for cheating on the metaphysics exam; I looked into the soul of the boy sitting next to me.
This is a snakeskin jacket! And for me it's a symbol of my individuality, and my belief... in personal freedom.
-
February 21st, 2014, 08:31 AM
#3
Re: CComPtr<T> System.AccessViolationException
Originally Posted by Eri523
Why did you implement CameraHook as a managed class at all? I can't see any reaon for that in what you posted, and turning it into a native class may alreafy eliminate your probem, as native/managed interop can be a quite tricky thing.
Going even further, why is your console app a managed one in the first place? There may, however, be a reason for that lying outside the scope of your post.
I've posted a partial code for simplicity.
The entire class is the following:
Code:
ref class CameraHook
{
private:
int cameraOffset;
DWORD_PTR dwPtr;
CComPtr<IAuga> *auga;
public:
CameraHook(CComPtr<IAuga> *ag);
HRESULT StartCamera();
HRESULT StopCamera();
static VCamSDKClass^ vCamSDK;
};
I need the managed class because VCamSDKClass is managed. It's wrong?
I'm new in C++/CLI and probably I'm missing something.
Thanks,
Marco
-
February 21st, 2014, 09:12 AM
#4
Re: CComPtr<T> System.AccessViolationException
Originally Posted by marco.bernasconi
I need the managed class because VCamSDKClass is managed. It's wrong?
Well, the name of that class suggests that it's from a library you didn't implement yourself, so you may not simply change that one into a native class. If you need that class and are not accessing it via COM, that would at least mean your application needs to be managed. (... unless you write a native wrapper DLL around the SDK library that exposes a native interface and access that from your native application, but at the moment I can't see what benefit that would gain.)
However, CameraHook::vCamSDK is that class' only managed member, and it's static as well as public, so does it really need to be a member of CameraHook? If you can move it elsewhere, that would allow you to make CameraHook native. Also, there is a way to have references to native objects as members in a native class, but that's non-trivial and I'd have to look up how that's done myself first. So if there are any simpler options, I'd think they'd be preferable.
Finaly, perhaps it would allow us to offer better assistance if we'd know the bigger picture. What non-standard libraries (and hardware, if applicable) are you using? Perhaps someone around here has already worked with that and can give more qualified comments.
I was thrown out of college for cheating on the metaphysics exam; I looked into the soul of the boy sitting next to me.
This is a snakeskin jacket! And for me it's a symbol of my individuality, and my belief... in personal freedom.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|