ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   How can I call Range::Find from C++ without crashing Excel? (https://www.excelbanter.com/excel-programming/291160-how-can-i-call-range-find-c-without-crashing-excel.html)

Aaron Queenan

How can I call Range::Find from C++ without crashing Excel?
 
I can call Range::Find from VBA - it works correctly, and requires only one
argument.

When I call it from C++, the function either throws an exception, or causes
a "Stack Corruption" error.

I am calling it with the following syntax:

Excel::_WorksheetPtr pWorksheet = Wb-Sheets-Item[1];

Excel::RangePtr pRangeSearch = pWorksheet-Cells;

Excel::RangePtr pRangeCurrent = pRangeSearch-Find("MKV", _variant_t(),
_variant_t(),
_variant_t(), _variant_t(), Excel::xlNext, _variant_t(),
_variant_t());

Is there anything I'm doing wrong?

Thanks,
Aaron Queenan.



Tom Ogilvy

How can I call Range::Find from C++ without crashing Excel?
 
In VBA, the method returns NOTHING (uninitialized object) if the target is
not found. Would that cause the error you are getting?

--
Regards,
Tom Ogilvy

"Aaron Queenan" wrote in message
...
I can call Range::Find from VBA - it works correctly, and requires only

one
argument.

When I call it from C++, the function either throws an exception, or

causes
a "Stack Corruption" error.

I am calling it with the following syntax:

Excel::_WorksheetPtr pWorksheet = Wb-Sheets-Item[1];

Excel::RangePtr pRangeSearch = pWorksheet-Cells;

Excel::RangePtr pRangeCurrent = pRangeSearch-Find("MKV",

_variant_t(),
_variant_t(),
_variant_t(), _variant_t(), Excel::xlNext, _variant_t(),
_variant_t());

Is there anything I'm doing wrong?

Thanks,
Aaron Queenan.





Aaron Queenan

How can I call Range::Find from C++ without crashing Excel?
 
I don't know what's causing the error - Range::Find never returns, but about
10 seconds after calling it, I get either a stack frame corruption error
(something about the base pointer not being preserved across a function
call), or an exception. All of the arguments I'm passing as _variant_t()
are optional.

Aaron.

"Tom Ogilvy" wrote in message
...
In VBA, the method returns NOTHING (uninitialized object) if the target is
not found. Would that cause the error you are getting?

--
Regards,
Tom Ogilvy

"Aaron Queenan" wrote in

message
...
I can call Range::Find from VBA - it works correctly, and requires only

one
argument.

When I call it from C++, the function either throws an exception, or

causes
a "Stack Corruption" error.

I am calling it with the following syntax:

Excel::_WorksheetPtr pWorksheet = Wb-Sheets-Item[1];

Excel::RangePtr pRangeSearch = pWorksheet-Cells;

Excel::RangePtr pRangeCurrent = pRangeSearch-Find("MKV",

_variant_t(),
_variant_t(),
_variant_t(), _variant_t(), Excel::xlNext, _variant_t(),
_variant_t());

Is there anything I'm doing wrong?

Thanks,
Aaron Queenan.







Dirk[_2_]

How can I call Range::Find from C++ without crashing Excel?
 
First of all for all the optional parameters that you don't use pass
vtMissing.
pRangeSearch-Find("MKV", vtMissing ...

Then make sure all the smart pointers wrap a valid interface pointer. You
should
always do something like this:
Excel::_WorksheetPtr pWorksheet = Wb-Sheets-Item[1];
ATLASSERT(pWorksheet != 0); // if called from atl code

Where do you use the given code? Could there be an issue with the calling
convention?


"Aaron Queenan" wrote in message
...
I can call Range::Find from VBA - it works correctly, and requires only

one
argument.

When I call it from C++, the function either throws an exception, or

causes
a "Stack Corruption" error.

I am calling it with the following syntax:

Excel::_WorksheetPtr pWorksheet = Wb-Sheets-Item[1];

Excel::RangePtr pRangeSearch = pWorksheet-Cells;

Excel::RangePtr pRangeCurrent = pRangeSearch-Find("MKV",

_variant_t(),
_variant_t(),
_variant_t(), _variant_t(), Excel::xlNext, _variant_t(),
_variant_t());

Is there anything I'm doing wrong?

Thanks,
Aaron Queenan.






All times are GMT +1. The time now is 12:20 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com