से कस्टम प्रकारों का एक सफेयर पास करना C++ से C# तक कस्टम प्रकारों (केवल गुण वाले वर्ग) की सरणी पास करने के लिए Safearray
का उपयोग कैसे कर सकता है? VT_RECORD
का उपयोग कर ऐसा करने का सही तरीका है? जब SAFEARRAY कक्षाओं की सरणी के संदर्भ में एक शून्य के रूप में प्रबंधित कोड के लिए हो जाता है को भरने की कोशिश कर रहासी ++ से सी #
मैं निम्नलिखित तरीके से कोशिश कर रहा हूँ, लेकिन
SafeArrayPutElement
एक त्रुटि देता है।
मैं कामयाब दुनिया में निम्नलिखित की तरह कुछ है:
[ComVisible(true)]
public interface IStatistics
{
double Mean { get; set; }
double StdDev { get; set; }
}
[Serializable]
[ComVisible(true)]
public class Statistics : IStatistics
{
public Mean { get; set; }
public double StdDev { get; set; }
}
अप्रबंधित दुनिया:
HRESULT hr = CoInitialize(NULL);
...
SAFEARRAY *pEquationsStatistics;
// common dimensions for all arrays
SAFEARRAYBOUND dimensions[1];
dimensions[0].cElements = 2;
dimensions[0].lLbound = 0;
pEquationsStatistics = SafeArrayCreate(VT_RECORD, 1, dimensions);
...
for (long i = 0; i < dimensions[0].cElements; i++)
{
long indices[1];
indices[0] = 0;
...
// Equation statistics
IStatisticsPtr pIStatistics(__uuidof(Statistics));
pIStatistics->PutMean(1.0); // so far so good
result = SafeArrayPutElement(pEquationsStatistics, indices, pIStatistics);
...
indices[0]++;
}
कृपया ध्यान दें कि मैं कर रहा हूँ में सक्षम उपयोग SafeArray
कोई साथ BSTR
की अन्य सारणियों पारित करने के लिए दो अनुप्रयोगों के बीच समस्याएं। तो यह एक संरचना पारित करने के लिए कुछ असाधारण है।
Stefano
त्रुटि क्या है? – fretje