March 16, 2020
On 3/16/20 10:11 AM, Ferhat Kurtulmuş wrote:
> On Sunday, 15 March 2020 at 22:25:27 UTC, Arine wrote:
>> On Sunday, 15 March 2020 at 21:27:32 UTC, Ferhat Kurtulmuş
> 
>> extern(C++, cv){
>> extern(C++, class) struct Size_(_Tp){
>>     @disable this();
>>     ~this() { }
>>
>>     final _Tp area() const;
>>     final double aspectRatio() const;
>>     final bool empty() const;
>>
>>     _Tp width; //!< the width
>>     _Tp height; //!< the height
>> }
>> }
>>
>> extern(C++){
>>     cv.Size_!int* createSizeIntWH(int w, int h);
>> }
>>
>> void main()
>> {
>>     Size_!int* sz = createSizeIntWH(200, 100);
>>     writeln(sz.width);
>> }
> 
> This worked for me too. But member functions are still causing linker error. It seems like docs (https://dlang.org/spec/cpp_interface.html) do not cover those situations. Is there any other sources to read for it. Maybe you make a pull request to docs covering C++ interfacing tips in detail.

Not tested:

 extern(C++, class) struct Size_(_Tp){
     @disable this();
     ~this() { }
extern(C++): // <- IIRC linkage should be set for members separately from aggregate
     final _Tp area() const;
     final double aspectRatio() const;
     final bool empty() const;

     _Tp width; //!< the width
     _Tp height; //!< the height
 }
March 16, 2020
On Monday, 16 March 2020 at 07:46:00 UTC, drug wrote:
> On 3/16/20 10:11 AM, Ferhat Kurtulmuş wrote:
>> On Sunday, 15 March 2020 at 22:25:27 UTC, Arine wrote:
>>> On Sunday, 15 March 2020 at 21:27:32 UTC, Ferhat Kurtulmuş
>> 
>>> extern(C++, cv){
>>> extern(C++, class) struct Size_(_Tp){
>>>     @disable this();
>>>     ~this() { }
>>>
>>>     final _Tp area() const;
>>>     final double aspectRatio() const;
>>>     final bool empty() const;
>>>
>>>     _Tp width; //!< the width
>>>     _Tp height; //!< the height
>>> }
>>> }
>>>
>>> extern(C++){
>>>     cv.Size_!int* createSizeIntWH(int w, int h);
>>> }
>>>
>>> void main()
>>> {
>>>     Size_!int* sz = createSizeIntWH(200, 100);
>>>     writeln(sz.width);
>>> }
>> 
>> This worked for me too. But member functions are still causing linker error. It seems like docs (https://dlang.org/spec/cpp_interface.html) do not cover those situations. Is there any other sources to read for it. Maybe you make a pull request to docs covering C++ interfacing tips in detail.
>
> Not tested:
>
>  extern(C++, class) struct Size_(_Tp){
>      @disable this();
>      ~this() { }
> extern(C++): // <- IIRC linkage should be set for members separately from aggregate
>      final _Tp area() const;
>      final double aspectRatio() const;
>      final bool empty() const;
>
>      _Tp width; //!< the width
>      _Tp height; //!< the height
>  }

Ok, here is a solution. I opened my lib (yielded by my auxilary cpp) using 7zip. There are two files containing symbol names, 1.txt and 2.txt. I searched for names of member functions. They were not there because c++ compiler does not compile member functions of class templates because we don't actually use them. So, I simply include this line in my aux cpp file and recompiled it:

template class cv::Size_<int>;

I reopened 1.txt and they are there now:

?area@?$Size_@H@cv@@QEBAHXZ
?aspectRatio@?$Size_@H@cv@@QEBANXZ

now everything works :D

March 16, 2020
On 3/16/20 12:24 PM, Ferhat Kurtulmuş wrote:
> 
> Ok, here is a solution. I opened my lib (yielded by my auxilary cpp) using 7zip. There are two files containing symbol names, 1.txt and 2.txt. I searched for names of member functions. They were not there because c++ compiler does not compile member functions of class templates because we don't actually use them. So, I simply include this line in my aux cpp file and recompiled it:
> 
> template class cv::Size_<int>;
> 
> I reopened 1.txt and they are there now:
> 
> ?area@?$Size_@H@cv@@QEBAHXZ
> ?aspectRatio@?$Size_@H@cv@@QEBANXZ
> 
> now everything works :D
> 

Would be nice if you update wiki ;)
March 16, 2020
On Monday, 16 March 2020 at 09:28:15 UTC, drug wrote:
> On 3/16/20 12:24 PM, Ferhat Kurtulmuş wrote:
>> 
>> Ok, here is a solution. I opened my lib (yielded by my auxilary cpp) using 7zip. There are two files containing symbol names, 1.txt and 2.txt. I searched for names of member functions. They were not there because c++ compiler does not compile member functions of class templates because we don't actually use them. So, I simply include this line in my aux cpp file and recompiled it:
>> 
>> template class cv::Size_<int>;
>> 
>> I reopened 1.txt and they are there now:
>> 
>> ?area@?$Size_@H@cv@@QEBAHXZ
>> ?aspectRatio@?$Size_@H@cv@@QEBANXZ
>> 
>> now everything works :D
>> 
>
> Would be nice if you update wiki ;)

It would be better for someone more experienced to do this ;)
1 2
Next ›   Last »