ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   [C#][COM] Excel crashs when a cell name is a function name (https://www.excelbanter.com/excel-programming/385578-%5Bc-%5D%5Bcom%5D-excel-crashs-when-cell-name-function-name.html)

Niels Van Vliet

[C#][COM] Excel crashs when a cell name is a function name
 
Here is how to reproduce the problem:
1. Create a C# COM server
- Create a new DLL, with register for COM interlop
- Add the code (available below).
2. Test
- In Excel-Tools-AddIn-Automation, choose TestServerCom.TestServerCom
- In cell B1, type =Hello("niels").
- the value of B1 will be: "Hello niels!";
3. Test the crash
- Select A1
- Define the name of the cell A1 this way: on the left of the formula
bar, there is a white box where A1 is written. Change it to Hello.
- Excel crashs.

Notes:
Different behaviours:
- If the user changes the name the following way, it does not crash:
Insert-Name-Define- Hello
- With C++ XLL, it productes #ref, but do not crash
- With 'standard' functions (SIN, MAX, ...), it works. If you define A1 to
SIN as stated in point 3, then =SIN(3) refers to the formula, =SIN*3 refers
to the cell.

Config:
- C#2, Visual 2005 patched with 908002
- Excel 2002 English SP3, under Windows XP

I would like you to confirm that it is a bug, and to know if a patch exists.

I google, but could not find anything (too many results with "excel",
"name", "COM", ...).

Here is the code to build a simple COM server:

using System;
using System.Runtime.InteropServices;
namespace TestServerCom{
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public partial class TestServerCom {
public string Hello(string your_name)
{ return "Hello, " + your_name + "!";}

[ComRegisterFunctionAttribute]
public static void RegisterFunction(Type t)
{
Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(
"CLSID\\{" + t.GUID.ToString().ToUpper() +
"}\\Programmable");
}
[ComUnregisterFunctionAttribute]
public static void UnregisterFunction(Type t)
{
Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey(
"CLSID\\{" + t.GUID.ToString().ToUpper() +
"}\\Programmable");
}}}

Thanks
PS: By mistake I posted it in office.Addins also.


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

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