سلام

یک dll از یک COM Object دارم که میخوام توابع اون رو در داخل Thread فراخوانی کنم.

یک کلاس برای پیاده سازی Thread خودم نوشتم و COM Object رو داخل اون Create کردم. میخوام که با Resume کردن Thread در داخل تابع Execute توابع اون رو فراخوانی کنم.

سناریوهای زیر بوجود اومده:

1- وقتی برنامه 32 بیتی کامپایل میشه، موقع اجرای کام که می رسه پیغام زیر میاد:


Error getting data conversion flag


2- وقتی برنامه 64 بیتی باشه، پیغام زیر میاد:


CoInitialized has not been called


3- در حالت 64 بیتی، اگه قبل از فراخوانی توابع کام در Execute تابع CoInitialize رو با پارامتر nil فراخوانی کنم، پیغام بصورت زیر عوض میشه:


the application called an interface that was marshalled for a different thread


متوجه نشدم مشکل از کجاست؟

توضیح اینکه وقتی بخواهی با این dll در Thread اصلی برنامه کار کنی، مشکلی پیش نمیاد و توابع به خوبی اجرا میشه ... ! اما وقتی بخواهی داخل Thread باهاش کار کنی، مشکل بوجود میاد.

حتی این تست رو هم زدم که از داخل execute، شی کام ساخته شده در Main (و نه اون شی کامی که داخل Thread درست شده) رو فراخوانی بکنم، اما به این شکل فقط در حالت 32 بیتی اجرا میشه و در حالت 64 بیتی مشکل داره ... !؟