У меня много проблем с перегрузкой методов здесь, и я понятия не имею, почему каждый раз вызывается только один метод, независимо от количества параметров, которые я передаю.Ниже приведен пример кода.
[ClassInterface(ClassInterfaceType.AutoDual), ComVisible(true)]
public class myClass
{
//constructor
public myClass() {}
//base method
public string myfunction(string id, string pk) {return results;}
//overloading method 1
public string myfunction(string id, string pk, string param1) { return results;}
//overloading method 2
public string myfunction(string id, string pk, string param1, string param2) {return results;}
[ComRegisterFunctionAttribute]
public static void RegisterFunction(Type type)
{
Registry.ClassesRoot.CreateSubKey(
GetSubKeyName(type, "Programmable"));
RegistryKey key = Registry.ClassesRoot.OpenSubKey(
GetSubKeyName(type, "InprocServer32"), true);
key.SetValue("",
System.Environment.SystemDirectory + @"\mscoree.dll",
RegistryValueKind.String);
}
[ComUnregisterFunctionAttribute]
public static void UnregisterFunction(Type type)
{
Registry.ClassesRoot.DeleteSubKey(
GetSubKeyName(type, "Programmable"), false);
}
private static string GetSubKeyName(Type type,
string subKeyName)
{
System.Text.StringBuilder s =
new System.Text.StringBuilder();
s.Append(@"CLSID\{");
s.Append(type.GUID.ToString().ToUpper());
s.Append(@"}\");
s.Append(subKeyName);
return s.ToString();
}
}
Поэтому, когда я тестировал его в Excel, базовый метод работал нормально, и я мог получить ожидаемое значение.Тем не менее, он потерпит неудачу, если я попробую остальные две функции, используя перегрузку метода.Их просто не вызвали по какой-то причине.Я что-то упустил в коде?Кто-нибудь может мне помочь?Спасибо большое.
Редактировать:
В некоторых экспериментах мне приходит в голову, что можно распознать только 1 метод, который обычно является первым методом.Поэтому, если я поменяю порядок между базовым методом и методом перегрузки 1, будет вызван метод перегрузки 1 вместо базового метода.Похоже, весь класс просто застревает в первом методе и не будет продолжаться.